2017-10-19 100 views
0

所以我有json文件,我需要爲不同的文件獲取兩個不同的字符串。 第一個是要去的文件,因爲它應該但第二個不是。在for循環中迭代相同的json(dict)文件兩次

我做了我的研究,我知道我需要將文件指針移回去開始。但我只是不知道該怎麼做。因爲我剛剛得到這個錯誤:

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(字典)文件來啓動新的搜索回遷時..


更新:

現在,沒有錯誤,但第二個文件保持空白。 (感謝您縮短的代碼行!)

python找不到fileType。剩下的唯一解決方案是否在我的文件中出現問題?它看起來大約是這樣的:

[{'ID': 'BDB-0bxGag9AL_C4xB0hlM', 'VERSIONNUMBER':1},{ '寬度mm':127.0, 'heightIn':5.0, '寬度':1500} ,{ 'documentId': 'xmp.483a0ab5','的fileType': 'JPEG', '高mm':127.0}, '許可': 'rx--'}]

+0

問題出在'用於數據,lokaatio in ...':您重新使用數據變量名,以便舊數據被覆蓋。它原本是一本字典,不需要尋求(0)。 – RemcoGerlich

+0

'data'不是文件對象。您只需在'for'循環中重新使用該名稱即可將其綁定到一個字符串。 –

+0

您可以在從文件加載數據後添加'print(data)'併發布結果嗎? – kvorobiev

回答

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是不必要的(感謝@讓·弗朗索瓦·法布爾評論的)。你可以通過鍵獲取元素。

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

@ Jean-FrançoisFabre同意,感謝您的評論。將更新回答 – kvorobiev

+0

@ E.W查看我的更新。並添加新的問題描述到你的問題。 – kvorobiev

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)