我正在嘗試將一個很長的 JSON 檔案轉換為 CSV。我目前正在嘗試使用下面的代碼來完成此操作。
import json
import csv
with open('G:\user\jsondata.json') as json_file:
jsondata = json.load(json_file)
data_file = open('G:\user\jsonoutput.csv', 'w', newline='')
csv_writer = csv.writer(data_file)
count = 0
for data in jsondata:
if count == 0:
header = data.keys()
csv_writer.writerow(header)
count = 1
csv_writer.writerow(data.values())
data_file.close()
這段代碼完成了將所有資料寫入 CSV,但是僅將第一 JSON 行中的鍵用作 CSV 中的標題。這很好,但在 JSON 中還有更多的鍵可供使用。這會導致值混亂。我想知道是否有人可以幫助我找到一種方法來獲取所有可能的標題并可能在一行不包含該鍵或該鍵的值時插入 NA 。
JSON 檔案與此類似:
[
{"time": "1984-11-04:4:00", "dateOfevent": "1984-11-04", "action": "TAKEN", "Country": "Germany", "Purchased": "YES", ...},
{"time": "1984-10-04:4:00", "dateOfevent": "1984-10-04", "action": "NOTTAKEN", "Country": "Germany", "Purchased": "NO", ...},
{"type": "A4", "time": "1984-11-04:4:00", "dateOfevent": "1984-11-04", "Country": "Germany", "typeOfevent": "H7", ...},
{...},
{...},
]
我一直在尋找可能的解決方案,但找不到任何有類似問題的人。
uj5u.com熱心網友回復:
如果想使用 csv 和 json 模塊來執行此操作,則可以分兩次執行。第一遍收集 CSV 檔案的密鑰,第二遍將行寫入 CSV 檔案。此外,必須使用DictWriter,因為不同記錄中的鍵不同。
import json
import csv
with open('jsondata.json') as json_file:
jsondata = json.load(json_file)
# stage 1 - populate column names from JSON
keys = []
for data in jsondata:
for k in data.keys():
if k not in keys:
keys.append(k)
# stage 2 - write rows to CSV file
with open('jsonoutput.csv', 'w', newline='') as fout:
csv_writer = csv.DictWriter(fout, fieldnames=keys)
csv_writer.writeheader()
for data in jsondata:
csv_writer.writerow(data)
uj5u.com熱心網友回復:
您可以嘗試正常讀取它,然后使用如下方式將其轉換為 csv .to_csv:
df = pd.read_json('G:\user\jsondata')
#df = pd.json_normalize(df['Column Name']) #if you want to normalize it
dv.to_csv('example.csv')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/525950.html
