如何使用Python进行文本索引和搜索?
我想用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)
有没有人能帮我解决这个问题?
提前谢谢你们!
1 个回答
0
问题在于,你创建的 JSON 文件是有问题的。
如果你使用一个工具,比如 jsonlint
,来检查你的 "index.json" 文件,你会发现这个 JSON 文件格式上存在问题。
你的代码在生成 JSON 文件时,是在一个循环里使用 dic.write
,这样做是把 JSON 字符串的一部分一部分地添加上去,虽然每一部分可能都是有效的,但它们并没有正确地连接在一起。
解决方法有:
一次性写入完整的 JSON 文件
如果可以的话,先在内存中(可能以字典的形式)创建完整的字典内容,等到内容准备好后,再一次性把它写入 JSON 文件。