Neulich habe ich zusammengefasst, wie man eine json-Datei mit PowerShell liest, die erforderliche Formatierung durchführt und json ausgibt. Da ich es jedoch mit Python versucht habe, möchte ich es als Memorandum behalten.
Code von der letzten PowerShell
Zuerst muss die JSON-Datei gelesen werden.
data.json
{
"prefectures": [
{
"code": "Tokyo",
"name": "Tokio"
},
{
"code": "Osaka",
"name": "Osaka"
},
{
"code": "Aichi",
"name": "Aichi"
},
{
"code": "Fukuoka",
"name": "Fukuoka"
}
],
"tables": [
{
"code": "meeting_room",
"name": "Konferenzraum",
"field1": "id",
"field2": "floar",
"field3": "capacities"
},
{
"code": "parking",
"name": "Parkplatz",
"field1": "id",
"field2": "area",
"field3": "space_number",
"field4": "user_name",
"field5": "car_number",
"field6": "expire"
}
]
}
Was ich ausgeben möchte, ist eine JSON-Datei für jedes Element von Präfekturen x Tabellen. Darüber hinaus fügt der JSON die Vorwahl und den Bereichsnamen zu jedem Code und Namen der Tabelle hinzu.
Hier ist der Code, den ich ausprobiert habe. Ich denke, dass der Inhalt der for-Sätze in der 17. und 22. Zeile übersichtlicher organisiert werden kann, also muss ich mich widmen.
main.py
import os
import sys
import pathlib
import json
import itertools
def json_make():
"""
Json für Region x-Tabellentyp aus Json-Daten ausgeben
"""
jsonfile = open('data.json', 'r')
data = json.load(jsonfile)
prefectures = data['prefectures']
tables = data['tables']
for pref, table in itertools.product(prefectures, tables):
pref_code = pref["code"]
pref_name = pref["name"]
result = {}
for k in table:
if k == 'code':
result['code'] = f'{pref_code}_{table[k]}'
elif k == 'name':
result['name'] = f'{pref_name}_{table[k]}'
else:
result[k] = table[k]
expfile = open("./results/" + result['code'] + '.json', 'w')
# ensure_ascii=Vermeiden Sie japanische Codierung, indem Sie False hinzufügen
json.dump(result, expfile, indent=4, ensure_ascii=False)
#Nicht verarbeiten, wenn keine Datei vorhanden ist
if os.path.exists('data.json') is False:
sys.exit()
#Erstellen, wenn kein Ausgabeordner vorhanden ist
exp = pathlib.Path('./results')
if exp.exists() is False:
exp.mkdir()
json_make()
naoki$ ls -l results
-rw-r--r-- 1 naoki staff 139 4 19 13:16 Aichi_meeting_room.json
-rw-r--r-- 1 naoki staff 214 4 19 13:16 Aichi_parking.json
-rw-r--r-- 1 naoki staff 141 4 19 13:16 Fukuoka_meeting_room.json
-rw-r--r-- 1 naoki staff 216 4 19 13:16 Fukuoka_parking.json
-rw-r--r-- 1 naoki staff 139 4 19 13:16 Osaka_meeting_room.json
-rw-r--r-- 1 naoki staff 214 4 19 13:16 Osaka_parking.json
-rw-r--r--@ 1 naoki staff 139 4 19 13:16 Tokyo_meeting_room.json
-rw-r--r-- 1 naoki staff 214 4 19 13:16 Tokyo_parking.json
Aichi_meeting_room.json
{
"code": "Aichi_meeting_room",
"name": "Aichi_Konferenzraum",
"field1": "id",
"field2": "floar",
"field3": "capacities"
}
Aichi_parking.json
{
"code": "Aichi_parking",
"name": "Aichi_Parkplatz",
"field1": "id",
"field2": "area",
"field3": "space_number",
"field4": "user_name",
"field5": "car_number",
"field6": "expire"
}
Recommended Posts