Python从文本文件创建书籍索引

时间:2013-07-24 13:27:51

标签: python python-3.x

我有一个看起来像这样的文本文件......

3:degree
54:connected
93:adjacent
54:vertex
19:edge
64:neighbor
72:path
55:shortest path
127:tree
3:degree
55:graph
64:adjacent   and so on....

我希望我的函数读取每行文本,并将其拆分为冒号,使其成为字典,其中单词处于“键”位置,页码位于我的字典的“值”位置 - 然后我将不得不创建一个新的字典并扫描每个单词,如果它已经在字典中,只需添加它后面的页码,如果它不在字典中,我会将它添加到字典中。

到目前为止,这是我的想法......

def index(fileName):

    inFile=open(fileName,'r')
    index={}
    for line in inFile:
        line=line.strip()      #This will get rid of my new line character
        word=line[1]
        if word not in index:
            index[word]=[]
            index[word].append(line)
    return index

fileName='terms.txt'

print(index(fileName))

我在正确的页面上,但需要一些帮助才能开始。

3 个答案:

答案 0 :(得分:0)

修改我使用# edit

评论的行
def index(fileName):
    inFile=open(fileName,'r')
    index={}
    for line in inFile:
        line=line.strip().split(':',1) # edit
        word,index=line # edit
        if word not in index:
            index[word]=[]
        index[word].append(index) # edit
    return index

答案 1 :(得分:0)

你没有分割线,你只是把角色放在第1位。

使用.split(':', 1)在<{1}}上分割

:

您可能希望使用集合来避免两次添加相同的页码。您还可以使用def index(filename): with open(filename) as infile: index = {} for line in infile: page, word = map(str.strip, line.split(':', 1)) index.setdefault(word, []).append(int(page)) return index 进一步简化此操作:

collections.defaultdict

这给出了:

from collections import defaultdict

def index(filename):
    with open(filename) as infile:
        index = defaultdict(set)
        for line in infile:
            page, word = map(str.strip, line.split(':', 1))
            index[word].add(int(page))
        return index

输入文字; defaultdict(<type 'set'>, {'neighbor': set([64]), 'degree': set([3]), 'tree': set([127]), 'vertex': set([54]), 'shortest path': set([55]), 'edge': set([19]), 'connected': set([54]), 'adjacent': set([64, 93]), 'graph': set([55]), 'path': set([72])}) defaultdict的子类,其行为与普通字典相似,但它会为您尝试访问但尚未存在的每个键创建一个新的dict。< / p>

答案 2 :(得分:0)

您可以使用str.split将字符串分隔为令牌。在您的情况下,分隔符为:

records = """3:degree
     54:connected
     93:adjacent
     54:vertex"""
index = {}
for line in records.split('\n'):
     page, word = line.split(':')
     index[word] = int(page.strip())

index
# {'vertex': 54, 'connected': 54, 'adjacent': 93, 'degree': 3}

在某些时候,您需要处理具有多个页面引用的单词。为此,我建议您创建一个collections.defaultdict,其中list为默认值:

from collections import defaultdict
index = defaultdict(list)
index[word].append(page)  # add reference to this page