我想从文件夹和子文件夹中读取文本文件,并将它们作为带有python的字典保存到json文件中。我不确定读取是否已经正确但在搜索中我总是收到错误消息。
这是我的索引代码
#!/usr/bin/python
import sys
import glob
import os
import json
basePath = str(sys.argv[1])
allfolder = []
filename = []
fh = []
for files in glob.glob( basePath + '/*.txt' ):
filename.append(files)
for root, dirs, files in os.walk( basePath ):
allfolder.append(dirs)
searchfolder = allfolder[0]
for folder in searchfolder:
for files in glob.glob( basePath + '/' + folder + '/*.txt' ):
filename.append(files)
dic = open('index.json',"w")
info = {}
for i in filename:
fobj = open(i,"r")
for line in fobj:
zeile = line.split(" ")
for a in zeile:
b = a.strip()
if b == "":
break
dic.write(json.dumps({'wort' : b, 'pfad' : i}, indent=2))
fobj.close()
dic.close()
和我的搜索代码
#!/usr/bin/python
import sys
import os
import json
dictionary = 'index.json'
search = str(sys.argv[1])
if os.path.isfile(dictionary) == False:
print('Die Datei wurde nicht gefunden')
json_data=open(dictionary)
data = json.load(json_data)
pprint(data)
json_data.close()
现在出现错误消息
christoph@Notebook-CSWS:~/System/Blatt4$ python3 sucher.py a
Traceback (most recent call last):
File "sucher.py", line 15, in <module>
data = json.load(json_data)
File "/usr/lib/python3.3/json/__init__.py", line 274, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "/usr/lib/python3.3/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.3/json/decoder.py", line 355, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 4 column 2 - line 54490 column 2 (char 87 - 1833872)
任何人都可以帮我解决问题吗? 提前谢谢!
答案 0 :(得分:0)
问题是,您正在创建损坏的json文件。
如果您使用jsonlint
之类的工具并让它检查您的&#34; index.json&#34;文件,您将看到json文件格式的问题。
创建JSON文件的代码在循环中使用dic.write
,因此它附加了JSON字符串,这些字符串可能一个接一个地有效,但不会连接。
解决方案是:
如果你能负担得起,先在内存中创建完整的字典内容(可能以字典的形式),最后,当你完成后,只需将其转储到json文件中一次。