在for循环中迭代相同的json(dict)文件两次

时间:2017-10-19 07:09:10

标签: python json for-loop

所以我有json文件,我需要获得两个不同的字符串到不同的文件。 第一个是按原样进入文件,但第二个不是。

我做了我的研究,我知道我需要将文件指针移回去开始。但我只是不知道该怎么做。因为我只会收到这个错误:

Traceback (most recent call last):
  File "v4.py", line 65, in <module>
    data.seek(0,0)
AttributeError: 'str' object has no attribute 'seek'

尝试使用.seek(0)

将其移回时
with open('idd.json', 'r') as data_file:    
    data = json.load(data_file)

with open('id.txt','w') as outfile:
    for data, lokaatio in data[0].items():
        if data=='id':
            print(lokaatio, file=outfile)

data.seek(0,0)

with open('type.txt','w') as outfiles:
    for data, type in data[0].items():
        if data=='fileType':
            print(type, file=outfiles)

如何移动json(dict)文件以开始新搜索..

更新

现在,没有错误,但第二个文件仍为空。 (感谢您缩短代码行!)

python找不到fileType。唯一剩下的解决方案是我的文件有问题吗?它看起来像这样:

[{'id':'BDB-0bxGag9AL_C4xB0hlM','versionNumber':1},{'widthMm':127.0,'heightIn':5.0,'width':1500},{ 'documentId':'xmp.483a0ab5','fileType':'JPEG','heightMm':127.0},'权限':'rx - '}]

2 个答案:

答案 0 :(得分:0)

行后

data = json.load(data_file)

变量data将包含dict,而不是file。你的代码(data.seek(0,0)除外)是完全没问题的。你的问题在于

for data, lokaatio in data[0].items():

您重新定义data变量。尝试用

替换它
with open('id.txt','w') as outfile:
    for d, lokaatio in data[0].items():
        if d=='id':
            print(lokaatio, file=outfile)

此外,不需要循环dict(感谢@ Jean-FrançoisFabre的评论)。你可以按键获取元素。

with open('id.txt','w') as outfile:
    print(data.get('id', ''), file=outfile)

第二次循环相同

with open('type.txt','w') as outfiles:
    print(data.get('fileType', ''), file=outfiles)

您的所有代码都可以替换为

with open('idd.json', 'r') as data_file:    
    data = json.load(data_file)

with open('id.txt','w') as idfile, open('type.txt','w') as typefile:
    print(data.get('id', ''), file=idfile)
    print(data.get('fileType', ''), file=typefile)

答案 1 :(得分:0)

无需循环两次,只需使用简单的if,elif语句并将两个文件一起打开即可。像这样:

with open('idd.json', 'r') as data_file:    
    data = json.load(data_file)

with open('id.txt','w') as outfile1, open('type.txt','w') as outfile2 :
    for key,value in data[0].items(): # or is your dict in data.items()?
        if key =='id':
            print(value, file=outfile1)
        elif key =='fileType':
            print(value, file=outfile2)