首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查字符串是否在文本文件中不工作

检查字符串是否在文本文件中不工作
EN

Stack Overflow用户
提问于 2017-08-22 20:48:32
回答 4查看 621关注 0票数 0

我正在用python3.6编写,并且在一个简短的文本文档中使我的代码匹配字符串有困难。这是破坏我的更大程序的精确逻辑的一个简单例子:

代码语言:javascript
复制
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")

文本文档的格式如下:

代码语言:javascript
复制
bah
gah
fah
dah
mah

我每次运行它都会打印出“失败”。我是否使用了从文本文档中读取数据的错误方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-08-22 20:52:53

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

所以它耗尽了文件,下一个对file.read().splitlines()的调用返回一个空列表..。

"grep“模式的一个更好的方法是迭代文件行,而不是完全读取它。因此,如果在文件的早期找到字符串,则可以节省时间:

代码语言:javascript
复制
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

代码语言:javascript
复制
lines = {line.rstrip() for line in f}

所以你的in lines电话会快得多。

票数 1
EN

Stack Overflow用户

发布于 2017-08-22 20:57:51

试一试:

代码语言:javascript
复制
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")
票数 1
EN

Stack Overflow用户

发布于 2017-08-22 20:54:34

你不能读两遍这个文件。

当您执行print(file.read().splitlines())时,将读取该文件,下一次对该函数的调用将不会返回任何内容,因为您已经在文件的末尾。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45826705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档