【发布时间】:2014-11-30 18:58:58
【问题描述】:
我们目前正在运行一个程序,该程序已经执行了一个小时(但仍未完成),因此我们想知道是否可以改进我们的程序代码,使其运行得更快。
我们的程序由两部分组成:首先我们需要更改字符串,因为我们使用 JSON 字典,并且所有项目的数据都有相似的键(“track”)——如果我们不这样做,输出只会给出第一首曲目。其次,我们需要将 JSON 数据打印到 csv 文件中。
JSON 文件的片段:(实际文件约为 900 mb)
{
"VV":{
"Version":1,
"Data":[
{
"track":[
{
"time":"YYYY-MM-DDTHH:MM:SS:MS",
"tl":{
"x":10,
"y":11
},
"br":{
"x":20,
"y":20
}
},
{
"time":"YYYY-MM-DDTHH:MM:SS:MS",
"tl":{
"x":12,
"y":15
},
"br":{
"x":22,
"y":23
}
}
],
"track":[
{
"time":"YYYY-MM-DDTHH:MM:SS:MS",
"tl":{
"x":30,
"y":39
},
"br":{
"x":40,
"y":45
}
},
{
"time":"YYYY-MM-DDTHH:MM:SS:MS",
"tl":{
"x":12,
"y":18
},
"br":{
"x":22,
"y":24
}
}
]
}
]
}
}
我们的代码的第一部分:
with open(r'filename.json') as json_file:
fil = json_file.read()
i = 0
print i
while ('track' in fil) :
fil = fil.replace('track', 'tr'+str(i), 1)
i = i + 1
print i
input_data = json.loads(fil)
data_d = input_data['VV']['Data'][0]
第二部分:
with open(r'output.csv', 'wb') as csv_file:
writer = csv.writer(csv_file)
i = 0
for track, data in data_d.items():
i = i+1 # Track
for item in data:
#TRACK
item_values = []
item_values.append(i)
#DAY
#print item['time']
day = item['time'][8:10]
item_values.append(day)
#COORDINATEN
item_values.append(item['tl']['x'])
item_values.append(item['tl']['y'])
item_values.append(item['br']['x'])
item_values.append(item['br']['y'])
#TIME
time = item['time'][11:13]+item['time'][14:16]+item['time'][17:19]+item['time'][20:23]
item_values.append(time)
writer.writerow(item_values)
【问题讨论】:
-
我正在尝试理解您的问题。首先,您需要将“track”替换为“tr”。其次,您需要转储一个 CSV 文件。你想优化这个过程。是这样吗?
-
是的,这正是我们的问题。我们需要用 tr0、tr1、tr2 等替换轨道。因为我们需要相同的键。
-
可以更改上游输出格式吗?例如,每行输出一个轨道(如推文流),而不是创建一个大型 json 对象
-
我看到你的 JSON 对象包含多个名为 'track' 的字段,你能生成一个 JSON 对象来包含一个名为 'track' 的数组吗?
-
我们无法更改 JSON 对象,因为我们不创建它,但我们只从外部方接收它。最小的 JSON 文件包含 300 万行,只是为了估计文件的大小。
标签: python json csv dictionary replace