python - 从另一个文本文件中搜索一个文件中列出的字符串?

标签 python

我想在另一个文本文件中查找 list.txt(每行一个字符串)中列出的字符串,以防万一我发现它打印“string,one_sentence”以防找不到“string,another_sentence”。我正在使用以下代码,但它只在文件 list.txt 的字符串列表中找到最后一个字符串。无法理解可能是什么原因?

data = open('c:/tmp/textfile.TXT').read()
for x in open('c:/tmp/list.txt').readlines():
    if x in data:
        print(x,',one_sentence')
    else:
        print(x,',another_sentence')

最佳答案

当您使用 readlines() 读取文件时,生成的列表元素确实有尾随换行符。这些可能是您的匹配项少于预期的原因。

代替写作

for x in list:

for x in (s.strip() for s in list):

这会从 list 中的字符串中删除前导和尾随空格。因此,它会从字符串中删除尾随的换行符。

为了巩固你的程序,你可以这样做:

with open('c:/tmp/textfile.TXT') as f:
    haystack = f.read()

if not haystack:
    sys.exit("Could not read haystack data :-(")

with open('c:/tmp/list.txt') as f:
    for needle in (line.strip() for line in f):
        if needle in haystack:
            print(needle, ',one_sentence')
        else:
            print(needle, ',another_sentence')

我不想做太大的改变。最重要的区别是我在这里通过 with 语句使用上下文管理器。它确保为您正确处理文件(主要是关闭)。此外,使用生成器表达式动态剥离“针”线。上述方法是逐行读取和处理针文件,而不是一次将整个文件加载到内存中。当然,这只对大文件有影响。

关于python - 从另一个文本文件中搜索一个文件中列出的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12370342/

相关文章:

python - 使用贝叶斯优化时队列为空

python - 无法连接到mysql容器由于2003(HY000): Can't connect to MySQL server on 'mysql:3307' 而无法创建表

python - Dictreader 和正则表达式,索引问题

python - 在字典中组合字典并添加值

python - 在带有 Python 的 Windows 上使用符号链接(symbolic link)模块

python - 如何更改 QMainWindow 边框和标题栏的颜色?

python - py 安装程序 numpy. EXE在运行时抛出错误

python - 控制 Python 打印行数的变量

python - 使用子进程输出到 HDFS 中的文件

python - 将文本放置在圆圈周围