检查字符串是否在文本文件中不起作用

Checking if string is in text file is not working

我在 python 3.6 中编写,但在使我的代码匹配短文本文档中的字符串时遇到问题。这是破坏我的更大程序的确切逻辑的一个简单示例:

PATH = "C:\Users\JoshLaptop\PycharmProjects\practice\commented.txt"

file = open(PATH, 'r')

words = ['bah', 'dah', 'gah', "fah", 'mah']

print(file.read().splitlines())

if 'bah' not in file.read().splitlines():
    print("fail")

文本文档格式如下:

bah
gah
fah
dah
mah

而且每次我 运行 确实打印失败。我是否使用了不正确的方法从文本文档中读取数据?

问题是您正在打印 print(file.read().splitlines())

所以它耗尽了文件,下一次调用 file.read().splitlines() returns 一个空列表...

"grep" 模式的更好方法是遍历文件行而不是完整读取它。所以如果你在文件的早期找到字符串,你就节省了时间:

with open(PATH, 'r') as f:
    for line in f:
        if line.rstrip()=="bah":
            break
    else:
        # else is reached when no break is called from the for loop: fail
        print("fail")

这里的小问题是不要忘记调用 line.rstrip() 因为文件生成器发出带有行终止符的行。此外,如果您的文件中有尾随 space,此代码仍将匹配该词(如果您想匹配 leading 空白,请将其设置为 strip()

如果要匹配很多词,考虑创建一个 set 行:

lines = {line.rstrip() for line in f}

所以您的 in lines 通话会快很多。

您无法读取文件两次。

当您执行 print(file.read().splitlines()) 时,将读取文件并且下次调用此函数时 return 什么也不会发生,因为您已经在文件末尾。

试一试:

PATH = "C:\Users\JoshLaptop\PycharmProjects\practice\commented.txt"
file = open(PATH, 'r')
words = file.read().splitlines()
print(words)
if 'bah' not in words:
    print("fail")
PATH = "your_file"

file = open(PATH, 'r')

words = ['bah', 'dah', 'gah', "fah", 'mah']

if 'bah' not in (file.read().splitlines()) :
    print("fail")

如您所见,输出不是 'fail' 您必须在代码中使用一个 'file.read().splitlines()' 或将其保存在另一个变量中,否则您会收到 'fail' 消息