Python:提取特定行之间的行

Python:提取特定行之间的行,python,python-3.x,Python,Python 3.x,Windows 7 64位上的Python 3.6.7 64位 mydata.txt(实际文件非常大,因此readlines()不是选项) #之后的名称是容器名称,它们包含以“-”开头的对象 目标是只打印以下行(即容器的内容) 我的代码 import re with open('mydata.txt', 'r') as infile: container = '' allcontents = '' for line in infile: line = l

Windows 7 64位上的Python 3.6.7 64位

mydata.txt(实际文件非常大,因此readlines()不是选项)

#之后的名称是容器名称,它们包含以“-”开头的对象

目标是只打印以下行(即容器的内容)

我的代码

import re

with open('mydata.txt', 'r') as infile:
    container = ''
    allcontents = ''
    for line in infile:
        line = line.strip()
        if line.endswith('contains:'):
            print(allcontents[:-2] + container)
            container = re.search('#(.+)\scontains', line).group(1)
            container = '@' + container
            allcontents = '' #reset allcontents

        if line.startswith('- '):
            content = re.search('-\s(.+)$', line).group(1)
            allcontents = allcontents + content + ', '
这将产生输出

mmm, nnn, ooo@abc
ppp@def
sss, ttt@ghi
正如您所看到的,最后一个容器“jkl”没有被打印。它的输出在那里,但是在它可以打印循环结束之前。 如何解决此问题?

请执行以下操作:

print(allcontents[:-2] + container)
在外循环的末端

您的最后一行已经存储在
allcontents
中,只是您没有打印它。

请执行以下操作:

print(allcontents[:-2] + container)
在外循环的末端


您的最后一行已经存储在
allcontents
中,只是您没有打印它。

正如@Austin所说,您需要在循环外打印。以下是提供所需输出的修改:

import re

with open('mydata.txt', 'r') as infile:
    container = ''
    allcontents = ''
    for line in infile:
        line = line.strip()
        if line.endswith('contains:'):
            print(allcontents[:-2] + container)
            container = re.search('#(.+)\scontains', line).group(1)
            container = '@' + container
            allcontents = ''  # reset allcontents

        if line.startswith('- '):
            content = re.search('-\s(.+)$', line).group(1)
            allcontents = allcontents + content + ', '
    if container:
        print(allcontents[:-2] + container)

正如@Austin所说,你需要在循环之外打印。以下是提供所需输出的修改:

import re

with open('mydata.txt', 'r') as infile:
    container = ''
    allcontents = ''
    for line in infile:
        line = line.strip()
        if line.endswith('contains:'):
            print(allcontents[:-2] + container)
            container = re.search('#(.+)\scontains', line).group(1)
            container = '@' + container
            allcontents = ''  # reset allcontents

        if line.startswith('- '):
            content = re.search('-\s(.+)$', line).group(1)
            allcontents = allcontents + content + ', '
    if container:
        print(allcontents[:-2] + container)

出于好奇,你能给我们提供你文本文件“mydata.txt”大小的粗略估计吗?出于好奇,你能给我们提供你文本文件“mydata.txt”大小的粗略估计吗?不敢相信我错过了:(不敢相信我错过了:(