2017-10-19 19 views
0

だから、別のファイルに2つの異なる文字列を取得する必要があるjsonファイルがあります。 最初のファイルはファイルに保存されますが、2番目のファイルは保存されません。同じjson(dict)ファイルをforループで2回繰り返します。

私は研究をしましたが、私はファイルポインタを最初に戻す必要があることを知っています。しかし、私はちょうどそれを行う方法を知らない。私はこのエラーを取得しますので:

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

あなたはJSON(辞書)新しい検索を開始するためにファイルを移動するにはどうすればよい.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) 

でそれをバックに移動しようとしている。..


更新:

ここでエラーはありませんが、2番目のファイルは空のままです。 (短縮されたコード行ありがとう!)

pythonではfileTypeが見つかりませんでした。私のファイルに何か問題があるという唯一の解決策はありますか?

[{'ID': 'BDB-0bxGag9AL_C4xB0hlM'、 'のversionNumber':1}、{ 'widthMm':127.0、 'heightIn':5.0、 '幅' 1500}、それは次のように約見えます、{ '文書ID': 'xmp.483a0ab5'、'たfileType': 'JPEG'、 'heightMm':127.0}、 '権限': 'rx--'}]

+0

問題は 'for data、lokaatio in ...'です。データ変数名を再利用して、古いものを上書きします。もともとは辞書を持っていたので、シーク(0)の必要はありません。 – RemcoGerlich

+0

'data'はファイルオブジェクトではありません。 'for'ループの中で名前を再利用するだけで、文字列にバインドすることができます。 –

+0

ファイルから読み込まれた 'data'の後に' print(data) 'を追加して結果を投稿できますか? – kvorobiev

答えて

0

ライン後

data = json.load(data_file) 

変数datadictであり、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) 

すべてのあなたのコードだけであれば、単純な、ELIFステートメントを使用してオープン、ループする必要が二回ありません

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

に置き換えることができますあなたの2つのファイルを一緒に。

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) 
関連する問題