检查字符串是否在文本文件中不起作用
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' 消息
我在 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' 消息