Convertissez des données Excel en JSON avec python.
Les données Excel à convertir proviennent du Tableau des ingrédients des normes alimentaires japonaises. Je souhaite utiliser le fichier Excel Fruit suivant. (Cliquez pour télécharger le fichier.) https://www.mext.go.jp/component/a_menu/science/detail/__icsFiles/afieldfile/2016/01/15/1365344_1-0207r.xlsx
J'essaierai deux méthodes, ʻexcel2json et ʻopenpyxl
.
(ʻExcel2json` ne fonctionne pas bien.)
excel2json est un module qui convertit des données Excel en JSON avec python, mais ses fonctions sont très limitées. Il n'y a pas d'autre choix que de lire Excel et de créer un fichier json.
Je vais l'installer pour le moment. Notez que si vous n'entrez pas le «-3» de fin, un autre module sera installé.
$ pip install excel2json-3
Utilisons-le une fois qu'il est installé. C'est le seul code
excel2json.py
from excel2json import convert_from_file
convert_from_file("CHEMIN du fichier Excel que vous souhaitez convertir")
Une fois exécuté, un fichier json sera généré dans le même répertoire que le fichier Excel. Le nom du fichier json est le nom de la feuille Excel (fixe).
Lorsque j'ai mis le fichier Excel téléchargé tel quel et que je l'ai exécuté, le fichier json n'a pas pu être créé avec succès, supprimez donc la partie supplémentaire de la table et réessayez.
Le fichier Excel modifié ressemble à ceci ↓
Lorsque j'ouvre le fichier json créé et que je vois ...
{
"\u98df\u54c1\u7fa4": "07",
"\u98df\u54c1\u756a\u53f7": "07001",
"\u7d22\u5f15\u756a\u53f7": 751.0,
...
}
C'est devenu unicode comme ça. Quand j'ai essayé de le réparer avec l'extension appelée "encode decode" de vscode, c'est devenu comme ça.
{
"Groupe alimentaire": "07",
"Numéro d'aliment": "07001",
"Numéro d'index": 751.0,
...
}
Si la quantité de code est faible et que les données sont déjà en place, cela peut être fait très facilement, mais c'est un peu gênant car vous ne pouvez pas spécifier les données à acquérir. En ce qui concerne le code de caractère, je n'ai trouvé aucune méthode autre que celle ci-dessus, je vais donc essayer d'autres méthodes pour le moment.
openpyxl est un module d'exploitation d'Excel en python. Tout d'abord, installez openpyxl
$ pip install openpyxl
J'essaierai de l'utiliser une fois qu'il sera installé.
Veuillez noter que le fichier excell est le même que celui téléchargé. Cette fois, nous allons acquérir 7 éléments: numéro de l'aliment, nom de l'aliment, fibres alimentaires, potassium, fer, vitamine B1 et vitamine C.
import openpyxl
import json
load_book = openpyxl.load_workbook('excel fichier PATH')
sheet = load_book['07 Fruits']
json_path = 'json fichier PATH'
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))
Je vais expliquer la partie liée à l'article.
import openpyxl
import json
load_book = openpyxl.load_workbook('excel fichier PATH')
sheet = load_book['nom de la feuille']
json_path = 'json fichier PATH'
Puisque je veux utiliser openpyxl et json, j'importe également le module json. Lisez le fichier Excel avec ʻopenpyxl.load_workbook () et récupérez la feuille avec
load_book ['nom de la feuille'] `.
food_id = sheet.cell(row = 1, column = 2).value
Obtenez les données en spécifiant les cellules d'Excel en lignes et en colonnes. Avec ce code, nous obtenons 1 ligne et 2 colonnes de données.
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,
})
Collectez les données acquises dans un dictionnaire et ajoutez-les au tableau.
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))
Enfin, convertissez les données précédentes dans un dictionnaire et écrivez-le dans le fichier json. ʻOpen () `` mode = 'a'` spécifie que le fichier doit être ouvert en mode écriture. Au fait, si «mode» est «r», il sera en mode lecture, et si c'est «a», il sera en mode ajout.
Recommended Posts