所以我有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 - '}]
答案 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)