我正在用python3.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我每次运行它都会打印出“失败”。我是否使用了从文本文档中读取数据的错误方法?
发布于 2017-08-22 20:52:53
问题是你在打印print(file.read().splitlines())
所以它耗尽了文件,下一个对file.read().splitlines()的调用返回一个空列表..。
"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(),因为文件生成器使用行结束符发出行。此外,如果文件中有尾随空格,则此代码仍将与单词匹配(如果您想要匹配,即使使用前导空格,也要使用strip() )。
如果您想匹配大量的单词,请考虑创建一个行的set:
lines = {line.rstrip() for line in f}所以你的in lines电话会快得多。
发布于 2017-08-22 20:57:51
试一试:
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")发布于 2017-08-22 20:54:34
你不能读两遍这个文件。
当您执行print(file.read().splitlines())时,将读取该文件,下一次对该函数的调用将不会返回任何内容,因为您已经在文件的末尾。
https://stackoverflow.com/questions/45826705
复制相似问题