换行:不返回所有行

时间:2015-09-08 18:11:31

标签: python dictionary readlines

我正在尝试遍历文本文件并将每行放入字典中。例如: 如果是txt文件 一个 b ç

我正在尝试创建像

这样的字典

word_dict = {'a':1,'b:2','c':3}

当我使用此代码时:

def word_dict():
fin = open('words2.txt','r')
dict_words = dict()
i = 1
for line in fin:
    txt = fin.readline().strip()
    dict_words.update({txt: i})
    i += 1
print(dict_words)

我的词典只包含部分列表。如果我使用这段代码(不是试图建立字典,只是测试):

def word_dict():
fin = open('words2.txt','r')
i = 1
while fin.readline():
    txt = fin.readline().strip()
    print(i,'.',txt)
    i += 1

同样的事情。它会打印一个不完整的值列表。该列表与字典值匹配。我错过了什么?

2 个答案:

答案 0 :(得分:7)

你试图两次读取这些行。

这样做:

def word_dict(file_path):
    with open(file_path, 'r') as input_file:
        words = {line.strip(): i for i, line in enumerate(input_file, 1)}
    return words

print(word_dict('words2.txt'))

这解决了一些问题。

  1. 函数不应该有硬编码变量,而应该使用参数。这样您就可以重用该功能。
  2. 函数应该(通常)return值而不是打印它们。这允许您在进一步计算中使用函数的结果。
  3. 您使用的是手动索引变量,而不是使用内置enumerate
  4. 此行{line.strip(): i for i, line in enumerate(input_file, 1)}被称为字典理解。它等同于以下代码:

    words = {}
    for i, line in enumerate(input_file, 1):
        words[line.strip()] = i
    

答案 1 :(得分:0)

这是因为您正在调用readline()函数两次。只需:

def word_dict():
    fin = open('words2.txt','r')
    dict_words = dict()
    i = 1
    for line in fin:
        txt = line.strip()
        dict_words.update({txt: i})
        i += 1
    print(dict_words)