设置成员资格测试不起作用(Python2.7)

设置成员资格测试不起作用(Python2.7),python,python-2.7,file,set,Python,Python 2.7,File,Set,我有以下文件my_animals.txt,其中包含字符串列表: cat dog bear wolf flamingo parrot 我正在使用Python将文件读取到一个集合中,my_animals.txt中的每一行都是集合的一个元素: my_animals = set() # read in file with open('my_animals.txt', 'rb') as f: for animal in f: my_animals.add(animal.rstr

我有以下文件my_animals.txt,其中包含字符串列表:

cat
dog
bear
wolf
flamingo
parrot
我正在使用Python将文件读取到一个集合中,my_animals.txt中的每一行都是集合的一个元素:

my_animals = set()

# read in file
with open('my_animals.txt', 'rb') as f:
    for animal in f:
        my_animals.add(animal.rstrip("\n"))

# check for membership
if "cat" in my_animals:
    print True
else:
    print False

不幸的是,我的会员资格检查返回了
False
。我哪里做错了?

我建议您采用不同的方法处理当前的工作。首先,以文本模式打开文件:

with open('my_animals.txt', 'r') as f:

另外,使用
my\u animals.add(animal.rstrip())
,换行符将与任何其他空白字符一起自动删除。这非常有用,尤其是当您在Windows上时,例如,其中一行由
\r\n

分隔,您编写的代码是正确的,并且如注释所述,您可以删除“b”,以便不以二进制模式读取文件。您可以使用较小的文件进行测试,以确保情况属实


顺便说一句:如果你的文件是1GB(正如你在评论中提到的),请不要将整个文件加载到一个集合中,除非你确定你有足够的内存来完成它

您是否尝试过打印(my_animals)以确保它包含您期望的内容?为什么要以二进制模式读取文件?是的。它返回预期的输出,因为我正在使用的实际文件是1GB“因为我正在使用的实际文件是1GB”-您是否测试了您的问题中的输入是否确实再现了1GB文件中的错误?
print
语法说它是Python 2,
rstrip(“\n”)
没有抛出类型错误,所以这可能不是字节/unicode不匹配。@user2357112可能应该是
my_animals.add(animal.rstrip())