如何用python文本索引和搜索?

时间:2014-05-11 10:30:46

标签: python json dictionary

我想从文件夹和子文件夹中读取文本文件,并将它们作为带有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 :(得分:0)

问题是,您正在创建损坏的json文件。

如果您使用jsonlint之类的工具并让它检查您的&#34; index.json&#34;文件,您将看到json文件格式的问题。

创建JSON文件的代码在循环中使用dic.write,因此它附加了JSON字符串,这些字符串可能一个接一个地有效,但不会连接。

解决方案是:

一次性写入生成的JSON文件

如果你能负担得起,先在内存中创建完整的字典内容(可能以字典的形式),最后,当你完成后,只需将其转储到json文件中一次。