Konvertieren Sie Excel-Daten mit Python in JSON.
Die zu konvertierenden Excel-Daten stammen aus der Japanese Food Standard Ingredients Table. Ich möchte die folgende Frucht-Excel-Datei verwenden. (Klicken Sie hier, um die Datei herunterzuladen.) https://www.mext.go.jp/component/a_menu/science/detail/__icsFiles/afieldfile/2016/01/15/1365344_1-0207r.xlsx
Ich werde zwei Methoden ausprobieren, "excel2json" und "openpyxl".
(Excel2json
funktioniert nicht gut.)
excel2json ist ein Modul, das Excel-Daten mit Python in JSON konvertiert, dessen Funktionen jedoch sehr eingeschränkt sind. Sie haben keine andere Wahl, als Excel zu lesen und eine JSON-Datei zu erstellen.
Ich werde es vorerst installieren. Beachten Sie, dass ein anderes Modul installiert wird, wenn Sie das nachfolgende -3
nicht eingeben.
$ pip install excel2json-3
Lassen Sie es uns verwenden, sobald es installiert ist. Dies ist der einzige Code
excel2json.py
from excel2json import convert_from_file
convert_from_file("PFAD der Excel-Datei, die Sie konvertieren möchten")
Bei der Ausführung wird eine JSON-Datei im selben Verzeichnis wie die Excel-Datei generiert. Der Name der JSON-Datei ist der Name der Excel-Tabelle (fest).
Wenn ich die heruntergeladene Excel-Datei so wie sie ist ablege und ausführe, konnte die JSON-Datei nicht erfolgreich erstellt werden. Löschen Sie daher den zusätzlichen Teil in der Tabelle und versuchen Sie es erneut.
Die geänderte Excel-Datei sieht folgendermaßen aus ↓
Wenn ich die erstellte JSON-Datei öffne und sehe ...
{
"\u98df\u54c1\u7fa4": "07",
"\u98df\u54c1\u756a\u53f7": "07001",
"\u7d22\u5f15\u756a\u53f7": 751.0,
...
}
Es ist so ein Unicode geworden. Als ich versuchte, es mit der Erweiterung "encode decode" von vscode zu beheben, wurde es so.
{
"Essen Gruppe": "07",
"Nahrungsmittelnummer": "07001",
"Indexnummer": 751.0,
...
}
Wenn die Codemenge gering ist und die Daten bereits vorhanden sind, kann dies sehr einfach durchgeführt werden. Dies ist jedoch etwas unpraktisch, da Sie die zu erfassenden Daten nicht angeben können. Was den Zeichencode betrifft, konnte ich keine andere Methode als die oben genannte finden, daher werde ich vorerst andere Methoden ausprobieren.
openpyxl ist ein Modul zum Betreiben von Excel in Python. Installieren Sie zuerst openpyxl
$ pip install openpyxl
Ich werde versuchen, es zu verwenden, sobald es installiert ist.
Bitte beachten Sie, dass die Excel-Datei mit der heruntergeladenen identisch ist. Dieses Mal erwerben wir 7 Artikel: Nahrungsmittelnummer, Nahrungsname, Ballaststoffe, Kalium, Eisen, Vitamin B1 und Vitamin C.
import openpyxl
import json
load_book = openpyxl.load_workbook('Excel-Datei PATH')
sheet = load_book['07 Früchte']
json_path = 'JSON-Datei PFAD'
fruits_list = [{
"food_id": 0,
"name": ""
}]
for i in range(9, 183):
food_id = sheet.cell(row = i, column = 2).value
name = sheet.cell(row = i, column = 4).value
dietary_fiber = sheet.cell(row = i, column = 21).value
potassium = sheet.cell(row = i, column = 24).value
iron = sheet.cell(row = i, column = 28).value
vitamin_b1 = sheet.cell(row = i, column = 48).value
vitamin_c = sheet.cell(row = i, column = 56).value
food_id = int(food_id)
if dietary_fiber == 'Tr':
dietary_fiber = 0
if potassium == 'Tr':
potassium = 0
if iron == 'Tr':
iron = 0
if vitamin_b1 == 'Tr':
vitamin_b1 = 0
if vitamin_c == 'Tr':
vitamin_c = 0
if name.split(" ")[0][0] == '(' or name.split(" ")[0][0] == '(':
name = name.split(" ")[1]
else:
name = name.split(" ")[0]
if fruits_list[-1]['name'] != name:
fruits_list.append({
"food_id": food_id,
"name": name,
"dietary_fiber": dietary_fiber,
"potassium": potassium,
"iron": iron,
"vitamin_b1": vitamin_b1,
"vitamin_c": vitamin_c,
})
fruits_list.pop(0)
data_dict = {
"data": "fruits",
"fruits": fruits_list
}
with open(json_path, mode = 'w', encoding = 'utf-8') as f:
f.write(json.dumps(data_dict, ensure_ascii = False, indent = 4))
Ich werde den Teil erklären, der sich auf den Artikel bezieht.
import openpyxl
import json
load_book = openpyxl.load_workbook('Excel-Datei PATH')
sheet = load_book['Blattname']
json_path = 'JSON-Datei PFAD'
Da ich openpyxl und json betreiben möchte, importiere ich auch das json-Modul. Lesen Sie die Excel-Datei mit "openpyxl.load_workbook ()" und erhalten Sie das Blatt mit "load_book ['sheet name']".
food_id = sheet.cell(row = 1, column = 2).value
Rufen Sie die Daten ab, indem Sie die Excel-Zellen in Zeilen und Spalten angeben. Mit diesem Code erhalten wir 1 Zeile und 2 Spalten mit Daten.
fruits_list.append({
"food_id": food_id,
"name": name,
"dietary_fiber": dietary_fiber,
"potassium": potassium,
"iron": iron,
"vitamin_b1": vitamin_b1,
"vitamin_c": vitamin_c,
})
Sammeln Sie die erfassten Daten in einem Wörterbuch und fügen Sie sie dem Array hinzu.
data_dict = {
"data": "fruits",
"fruits": fruits_list
}
with open(json_path, mode = 'w', encoding = 'utf-8') as f:
f.write(json.dumps(data_dict, ensure_ascii = False, indent = 4))
Konvertieren Sie schließlich die vorherigen Daten in ein Wörterbuch und schreiben Sie sie in die JSON-Datei.
mode = 'a'
in open ()
gibt an, dass die Datei im Schreibmodus geöffnet werden soll. Übrigens, wenn "mode" "r" ist, befindet es sich im Lesemodus, und wenn es "a" ist, befindet es sich im Append-Modus.
Recommended Posts