不使用正则表达式在两条虚线之间提取文本数据?

时间:2017-05-29 06:36:54

标签: python parsing

我想在没有正则表达式的虚线之间提取数据。输入示例如下图所示:

input text

这样有30k行。

1 个答案:

答案 0 :(得分:0)

使用itertools.takewhileitertools.dropwhile。我假设只有虚线可以用破折号开头。

from itertools import takewhile, dropwhile

file = iter('''---
data1
data2
---
stuff
---
data3
data4
---'''.splitlines())

def in_between(data):
    data = iter(data) # make sure data is iterator
    not_dashed = lambda line: not line.startswith('-')

    while True:
        data = dropwhile(not_dashed, data)
        next(data)
        for x in takewhile(not_dashed, data):
            yield x
        next(data)

for x in in_between(file):
    print x

输出:

data1
data2
data3
data4

由于此解决方案从不将整个文件读入内存,而是一次使用迭代器和一行,因此处理非常大的文件时应该没有问题。