Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python If==true语句仅在readline的最后一行上工作_Python_File - Fatal编程技术网

Python If==true语句仅在readline的最后一行上工作

Python If==true语句仅在readline的最后一行上工作,python,file,Python,File,我的函数只是说单词文件中的最后一个单词是一个字谜(第一个助手函数)。但是文件中的每个单词都是我测试过的单词的一个字谜,并且在主函数之外使用helper函数独立返回true。我不确定它是否与/n作为字符串的一部分有关,然后它解释了这一点,但我尝试输入一个if语句,如果它在那里,并且也不起作用,则删除它。我还做了测试,以确保它正在.txt文件中的每个单词中运行,并且是正确的 def is_anagram(string1, string2): """Returns True if the tw

我的函数只是说单词文件中的最后一个单词是一个字谜(第一个助手函数)。但是文件中的每个单词都是我测试过的单词的一个字谜,并且在主函数之外使用helper函数独立返回true。我不确定它是否与
/n
作为字符串的一部分有关,然后它解释了这一点,但我尝试输入一个if语句,如果它在那里,并且也不起作用,则删除它。我还做了测试,以确保它正在
.txt
文件中的每个单词中运行,并且是正确的

def is_anagram(string1, string2):
    """Returns True if the two strings are anagrams of eachother.

    str, str -> bool"""
    if sorted(string1)==sorted(string2):
        return True
    else:
        return False


def find_anagrams(word):
    final = []
    content = open("small_list.txt")
    content.close
    while True:
        line = content.readline()
        print(line)
        if is_anagram(word, line) == True:
            print("bruh")
            final.append(line)
        elif line == '':
             break
    return final

根据您用于读取行的方法(
file.readline
),这是预期的。从:

f.readline()
从文件中读取一行;换行符 (
\n
)保留在字符串的末尾,仅在最后一个字符串中省略 如果文件未以换行结尾,则为文件的第行

您的
后面有一个换行符,但
word肯定没有。因此,最终,您需要改变的是:

line = content.readline().rstrip()
好吧,这就是你需要改变的一切,让它工作。此外,我还建议使用
和…as
上下文管理器来处理文件I/O。这是一种很好的做法,您会为此感谢自己

with open("small_list.txt") as f:
    for line in f:
        if is_anagram(word, line.rstrip()):
            ... # do something here
最好使用
for
循环来迭代文件的行(而不是
,因为
更干净)。此外,当您使用上下文管理器时,不需要显式调用
f.close()
(您当前没有这样做,您只是引用了该方法,而没有实际调用它)


在这个答案中加入@Christian Dean's,你也可以简化你的字谜函数-调用
sorted
并在一行中返回结果:

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

在阅读内容之前,您似乎正在关闭内容。
内容的目的是什么。关闭
?如果blah:return True否则:return False
等同于简单的
return blah
。在一般情况下,@detly的可能重复是,但是这里的废话已经是一个废话了……也只是给OP的一个提示:你的字谜函数可以是
def is_字谜(a,b):返回排序(a)==排序(b)
。啊,说得对@cᴏʟᴅsᴘᴇᴇᴅ. 我忘了设置rids dups。更新。