python - 使用 python 读取文本文件中两个字符串之间的行

标签 python text-files

我有一个包含消息的文本文件,该文件以“START”行开头并以“END”行结束。我希望 python 代码读取这两个单词之间的行。我有一个代码正在读取这两个单词之间的行。但它也在读取“开始”和“结束”行。我只想要这两个单词之间的线条。

我已经尝试过这段代码,它也读取“START”和“END”单词。

data=[]
flag=False
with open('/tmp/test.txt','r') as f:
    for line in f:
        if line.startswith('START'):
            flag=True
        if flag:
            data.append(line)
        if line.strip().endswith('END'):
            flag=False

print ''.join(data)  

请建议在两个单词之间读取的代码(不包括“START”和“END”行)

最佳答案

只需重新排列您的 if 语句即可。考虑它们的流动顺序以及何时评估 if flag。此外,您可以使用 elif 以便仅执行三个条件之一,但请确保 elif flag 行是最后一个条件。

按照您的示例设置方式,它将检查该行是否以 START 开头,然后设置标志。发生这种情况后,您将立即检查该标志是否已设置,因此它将打印出START。此外,它会打印每一行,然后在打印该行之后检查它是否应该打印END

重新排列顺序后,您将看到,如果该行以 START 开头,则下面没有命令可以打印该行。同样,它会在打印 END 行之前检查是否应该停止。

with open('/tmp/test.txt','r') as f:
    for line in f:
        if line.strip().endswith('END'):
            flag=False
        if flag:
            data.append(line)
        if line.startswith('START'):
            flag=True

elif 版本可能是更好的方法,因为它可以节省您对 if 语句的一些检查,但每次迭代只能执行一个结果。因此,如果更改了标志,则它永远不会打印出该行。

with open('/tmp/test.txt','r') as f:
    for line in f:
        if line.startswith('START'):
            flag=True
        elif line.strip().endswith('END'):
            flag=False
        elif flag:
            data.append(line)

关于python - 使用 python 读取文本文件中两个字符串之间的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814091/

相关文章:

Python 2.7 str(055) 返回 "45"而不是 055

python 7z 使用子进程提取

python - 如何为 PyPI 组织 Python 模块以支持 2.x 和 3.x

python - 从 Python 中的资源加载 txt 文件

c++ - C++文本文件末尾的两个点

java - 读取文本文件时出现 NullPointerException

java - 使用 Java 将文本文件读入数组会生成异常

python - Django 模型继承 : Delete subclass keep superclass

python - 如何将 x 和 y 轴上的值更改为 seaborn pairplot 中的单词?

php - 将 txt 文件的内容分解为数组