gpt4 book ai didi

python - 在python中将json文件解析为csv文件时如何获得水平输出

转载 作者:行者123 更新时间:2023-11-28 17:09:22 26 4
gpt4 key购买 nike

我想使用 python 将我的 json 文件转换为 csv 文件。我为此编写了一个脚本,但脚本无法正常工作。我的 json 模板看起来像

{
"-K6v8Ht6nXCjaO_ApNGr" : {
"key1" : 0,
"key2" : false,
"key3" : 0,
"key4" : 0,
"key5" : "01/01/2016 04:04",
"key" : "-K6v8Ht6nXCjaO_ApNGr",
"key6" : "01/01/2016 04:04",
"key7" : 23,
"key8" : 0,
"key9" : {
"date" : 1,
"day" : 5,
"hours" : 4,
"minutes" : 4,
"month" : 0,
"seconds" : 56,
"time" : 1451617496647,
"timezoneOffset" : -60,
"year" : 116
},
"triedConnector" : {
"OPENSL" : -1,
"SAPA" : -1,
"USB" : -1,
"USB_7" : -1
},......

我的脚本(V3.x):

import json,csv,sys
# -*- coding:utf-8 -*-

fileInput = sys.argv[1]
fileOutput = sys.argv[2]

inputFile = open(fileInput,'r') #open json file
outputFile = open(fileOutput, 'w+') #load csv file

data = json.load(inputFile) #load json content

inputFile.close() #close the input file

csv_file = csv.writer(outputFile)

csv_file.writerow(["header 0", "header 1", "header 2", "header 3", "header 4"]) #headers

for value in data.values():
for v in value.values():
csv_file.writerow([unicode(v).encode('utf-8')])


for value in data.values():
for v in value.values():
for z in v.values():
csv_file.writerow([unicode(z).encode('utf-8')])

outputFile.close()#close the output file

在这个脚本中,第一个 for 循环应该像这样打印

-K6v8Ht6nXCjaO_ApNGr
-K6v8Ht6nXCjaO_ApNGr
-K6v8Ht6nXCjaO_ApNGr

它工作得很好但不幸的是我的第二个for循环将这个输出提供给我的csv文件

-KjR-JvTm3BKVkYWoyTV
-Kj5ZdfgX8lLLi-htqPU
-KkC4t0XQoJDViNqt18n

False

"{u'seconds': 18, u'year': 117, u'month': 4, u'hours': 8, u'time': 1494223818226L, u'date': 8, u'minutes': 10, u'day': 1, u'timezoneOffset': -120}"

0
08/05/2017 08:10
"{u'OPENSL': -1, u'USB_7': -1, u'SAPA': -1, u'USB': -1}"
08/05/2017 08:10
-KjafVrmb_wuwb36xNq0
0
23
0
0

我想要一个水平输出,还有我的嵌套对象的第三个循环,但是当我尝试为最后一个循环运行我的脚本时,我得到了这个错误:

AttributeError: 'bool' object has no attribute 'values'.

很快我的问题是我需要这样的水平输出

K6v8Ht6nXCjaO_ApNGr 0, false, 0, 0, 01/01/2016 04:04, -K6v8Ht6nXCjaO_ApNGr K6v8Ht6nXCjaO_ApNGr 0, false, 0, 0, 01/01/2016 04:04, -K6v8Ht6nXCjaO_ApNGr

请问有人能帮我理解和解决这些问题吗?谢谢

最佳答案

除了 csv 字段的顺序不同之外,此代码似乎可以执行您想要的操作。通常这无关紧要。我还尝试让代码解释它在做什么。

json 是您在问题中提供的内容的三个副本,稍微修改以正确编译,主键已更改。

json_txt = '''\
{
"-K6v8Ht6nXCjaO_ApNGr" : {
"key1" : 0, "key2" : false, "key3" : 0, "key4" : 0, "key5" : "01/01/2016 04:04",
"key" : "-K6v8Ht6nXCjaO_ApNGr", "key6" : "01/01/2016 04:04", "key7" : 23,
"key8" : 0,
"key9" : { "date" : 1, "day" : 5, "hours" : 4, "minutes" : 4, "month" : 0,
"seconds" : 56, "time" : 1451617496647, "timezoneOffset" : -60, "year" : 116},
"triedConnector" : { "OPENSL" : -1, "SAPA" : -1, "USB" : -1, "USB_7" : -1}
},
"-K6v8Ht6nXCjaO_2" : {
"key1" : 0, "key2" : false, "key3" : 0, "key4" : 0, "key5" : "01/01/2016 04:04",
"key" : "-K6v8Ht6nXCjaO_ApNGr", "key6" : "01/01/2016 04:04", "key7" : 23,
"key8" : 0,
"key9" : { "date" : 1, "day" : 5, "hours" : 4, "minutes" : 4, "month" : 0,
"seconds" : 56, "time" : 1451617496647, "timezoneOffset" : -60, "year" : 116},
"triedConnector" : { "OPENSL" : -1, "SAPA" : -1, "USB" : -1, "USB_7" : -1}
},
"-K6v8Ht6nXCjaO_3" : {
"key1" : 0, "key2" : false, "key3" : 0, "key4" : 0, "key5" : "01/01/2016 04:04",
"key" : "-K6v8Ht6nXCjaO_ApNGr", "key6" : "01/01/2016 04:04", "key7" : 23,
"key8" : 0,
"key9" : { "date" : 1, "day" : 5, "hours" : 4, "minutes" : 4, "month" : 0,
"seconds" : 56, "time" : 1451617496647, "timezoneOffset" : -60, "year" : 116},
"triedConnector" : { "OPENSL" : -1, "SAPA" : -1, "USB" : -1, "USB_7" : -1}
}
}'''

import json
import csv

data = json.loads(json_txt)
print ('data keys -->', data.keys())
print ('one of these keys (arbitrary) -->', list(data.keys())[0])
print ('keys for one object in data -->', list(data[list(data.keys())[0]].keys()))
key9_fields = data[list(data.keys())[0]]['key9'].keys()
print ('keys in key9 -->', key9_fields)

print ('Now writing csv ...')

the_fieldnames = list(data[list(data.keys())[0]].keys())
# remove triedConnector and key9
the_fieldnames.remove('triedConnector')
the_fieldnames.remove('key9')
# add items from key9
the_fieldnames.extend(key9_fields)
print (the_fieldnames)

with open('tpbafk_csv.csv', 'w', newline='') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=the_fieldnames)
writer.writeheader()
for key in data.keys():
row = {}
for field_key in the_fieldnames:
if field_key in key9_fields:
row[field_key] = data[key]['key9'][field_key]
else:
row[field_key] = data[key][field_key]
writer.writerow(row)

打印在标准输出上的结果:

data keys --> dict_keys(['-K6v8Ht6nXCjaO_2', '-K6v8Ht6nXCjaO_3', '-K6v8Ht6nXCjaO_ApNGr'])
one of these keys (arbitrary) --> -K6v8Ht6nXCjaO_2
keys for one object in data --> ['key6', 'key8', 'triedConnector', 'key2', 'key7', 'key4', 'key', 'key5', 'key9', 'key3', 'key1']
keys in key9 --> dict_keys(['timezoneOffset', 'month', 'year', 'hours', 'time', 'day', 'seconds', 'date', 'minutes'])
Now writing csv ...
['key6', 'key8', 'key2', 'key7', 'key4', 'key', 'key5', 'key3', 'key1', 'timezoneOffset', 'month', 'year', 'hours', 'time', 'day', 'seconds', 'date', 'minutes']

csv文件:

key6,key8,key2,key7,key4,key,key5,key3,key1,timezoneOffset,month,year,hours,time,day,seconds,date,minutes
01/01/2016 04:04,0,False,23,0,-K6v8Ht6nXCjaO_ApNGr,01/01/2016 04:04,0,0,-60,0,116,4,1451617496647,5,56,1,4
01/01/2016 04:04,0,False,23,0,-K6v8Ht6nXCjaO_ApNGr,01/01/2016 04:04,0,0,-60,0,116,4,1451617496647,5,56,1,4
01/01/2016 04:04,0,False,23,0,-K6v8Ht6nXCjaO_ApNGr,01/01/2016 04:04,0,0,-60,0,116,4,1451617496647,5,56,1,4

关于python - 在python中将json文件解析为csv文件时如何获得水平输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48764603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com