for loop使用strip修改文件对象?

时间:2015-08-02 05:05:19

标签: python

我试图理解下面注释掉的代码行。当行被注释掉时,程序按预期工作:它读取函数tuple_to_word创建一个字典,其中words.txt行作为值。

但是,当代码被取消注释时,程序只打印一个空字典。但我无法理解为什么for循环会对tuple_to_word的调用产生任何影响。我猜测有问题的for循环会改变底层文件对象,但是如何?

fin = open('words.txt')
word_dict = {}
'''
for i in fin:
    word_dict[i.strip()] = 1
'''
def signature(s):
    t = list(s)
    t.sort()
    t = ''.join(t)
    return t    

def tuple_to_word():
    words_match_tuple = { }
    for line in fin:
        word = line.strip().lower()
        t = signature(word)
        words_match_tuple.setdefault(t, []).append(word)

    return words_match_tuple

print tuple_to_word()

1 个答案:

答案 0 :(得分:1)

答案是:如果激活'''..'''之间的代码,这将逐行解析输入文件。然后函数tuple_to_word()将在末尾找到文件光标,并且没有要从输入文件解析的行。

您应该重新打开输入文件或使用以下命令转到文件的开头

fin.seek(0)