提取两个字符串/标题之间的文本

时间:2015-06-21 07:33:56

标签: python text extraction

我有一个标题列表,我必须在这些标题之间提取文本。但这些标题不遵循命令(有时标题1可以是标题3,依此类推),在这种情况下,我如何处理这种提取?

实施例

Biography

text

text

Place of Birth

Text

Text

Life Style

text

text

Marriage

Text

Text

如果所有标题都按顺序放置,我可以使用下面的代码,但在我的情况下,这些标题不遵循订单,它会不断更改不同的输入文件。

with open('path/to/input') as infile, open('path/to/output', 'w') as outfile:
    copy = False
    for line in infile:
        if line.strip() == "Biography":
            copy = True
        elif line.strip() == "Place of Birth":
            copy = False
        elif copy:
            outfile.write(line)

3 个答案:

答案 0 :(得分:0)

只要所有"标题"事先知道,它足以改变你原来的路线:

elif line.strip() == "Place of Birth":

以这种方式:

elif line.strip() in ["Place of Birth", "Life Style", "Marriage", ...]:

答案 1 :(得分:0)

假设每个标题都以大写字母开头。

with open('path/to/input') as infile, open('path/to/output', 'w') as outfile:
    copy = False
    for line in infile:
        line = line.strip()
        if line[0] == line[0].capitalize():
            copy = True
        else:
            copy = False

        if copy:
            outfile.write(line)

答案 2 :(得分:0)

如果您只想提取某些标题的数据并避免其他标题的数据,那么对于那些您将副本设置为True,对于所有其他标题(确保匹配所有标题),所有其他标题都会使副本错误。

示例 -

if title in [<list of titles to save data>]:
    copy = True
elif title in [<list of titles to not save data>]:
    copy = False

要使用标题作为列名保存数据并将内部数据保存为记录,您可以先将每个列及其数据存储在另一个列表中的一行中,然后再使用 - list(zip(*lst))转置该列表。其中lst是您的列表,然后您可以使用numpy创建一个包含此列表的数组,并将数据保存到带有,分隔符的csv中。

示例代码 -

import numpy
lst = []
with open('path/to/input') as infile:
    copy = False
    for line in infile:
        if line.strip() in ["Biography"]:
            copy = True
            lst.append([line.strip()])
        elif line.strip() in ["Place of Birth"]:
            copy = False
        elif copy:
            lst[-1].append(line.strip())

lst = list(zip(*lst))
n = numpy.array(lst)
numpy.savetext("foo.csv", n, delimiter=",")