Python If == true语句仅适用于readline的最后一行

时间:2018-03-09 02:35:46

标签: python file

我的函数只说文字文件中的最后一个单词是anagram(第一个辅助函数)。但是文件中的每个单词都是我测试的单词的字谜,并且在主函数之外使用辅助函数独立地返回true。我不确定它是否与string newManagerName = "Some Random Name"; string manager = "CN=Kylie Seany,OU=Test,OU=Users"; int index = manager.IndexOf(",OU="); string newManager = "CN=" + newManagerName + manager.Substring(index); Console.WriteLine(newManager); 成为字符串的一部分有关,然后它解释了这一点,但我尝试输入一个if语句,如果它在那里并且确实在那里删除它也没工作。我也做了测试,以确保它正在运行/n文件中的每个单词,并且它是。

.txt

1 个答案:

答案 0 :(得分:2)

这是预期的,基于您用于读取行(file.readline)的方法。来自documentation

  

f.readline()从文件中读取一行;换行符   (\n)留在字符串的末尾,只在最后一个省略   文件的行,如果文件没有以换行符结尾。

您的line有一个尾随换行符,但word肯定没有。所以,最后,你需要改变的是:

line = content.readline().rstrip()

嗯,这就是你需要改为让它正常工作。此外,我还建议使用with...as上下文管理器来处理文件I / O.这是一个很好的做法,你会感谢你自己。

with open("small_list.txt") as f:
    for line in f:
        if is_anagram(word, line.rstrip()):
            ... # do something here

最好使用for循环来迭代文件的行(而不是while,它更干净)。此外,当您使用上下文管理器时,不需要显式调用f.close()(您当前没有这样做,您只是在没有实际调用它的情况下引用该方法)。

在这个答案中加入@Christian Dean的suggestion,你也可以简化你的anagram函数 - 调用sorted 将结果返回到一行:

def is_anagram(a, b):
    return sorted(a) == sorted(b)