我有两个文件,读取两个文件后,我将其写入python中的json文件中。问题出在最终的json文件中,我正在获取重复的json对象(附加了最后的json对象)。
我能够读取文件并生成json文件。
import json
data2 = {}
data1 = []
i = 1
with open('abc3') as json_file:
f=open("abc2", "r")
data = json.load(json_file)
lines =f.readlines()
for p,x in zip(data['Url'],lines):
print(p['Urls'])
print(x)
print(i)
print('')
data2['videoId'] = i
data2['videoUrl'] = p['Urls']
data2['videName'] = x
i = i + 1
data1.extend(data2)
with open('data1.json', 'w') as outfile:
json.dump(data1, outfile)
答案 0 :(得分:1)
重用data2
的相同引用是主要问题。在每次迭代时创建一个字典。
如果您要创建字典列表,则如果执行data1.extend(data2)
,则extend
会在字典的键上进行迭代。
快速修复:
for p,x in zip(data['Url'],lines):
print(p['Urls'])
print(x)
print(i)
print('')
data2 = {}
data2['videoId'] = i
data2['videoUrl'] = p['Urls']
data2['videName'] = x
i = i + 1
data1.append(data2)
但是列表理解会更清晰和更pythonic(注意:不要读取行,直接使用f
,这将避免读取无用的文件):
data1 = [{"videoId":i,"videoUrl":p['Urls'],'videoName':x.rstrip()}
for i,(p,x) in enumerate(zip(data['Url'],f),1)]
这将在每次迭代中创建一个字典。 i
的副作用被enumerate
(从1开始)的使用所代替。请注意,rstrip()
操作需要在逐行读取文件时删除行尾字符。
总结起来,这是我重写完整代码的方法:
import json
with open('abc3') as json_file:
data = json.load(json_file)
with open("abc2") as f:
data1 = [{"videoId":i,"videoUrl":p['Urls'],'videoName':x.rstrip()}
for i,(p,x) in enumerate(zip(data['Url'],f),1)]
with open('data1.json', 'w') as outfile:
json.dump(data1, outfile)