提取两个 strings/title 之间的文本

Extracting text between two strings/title

我有一个标题列表,我必须提取这些标题之间的文本。但是这些标题不遵循顺序(有时标题 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)

前提是所有"titles"都提前知道了,改你原来的线路就够了:

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

这样:

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

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

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)

如果您只想提取某些标题的数据而避免其他标题的数据,那么对于您将复制设置为 True 的那些,对于所有其他标题(确保匹配所有标题),所有其他标题都将复制设为 false。

例子-

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

要使用标题作为列名保存数据并将其中的数据作为记录保存,您可以先将每一列及其数据存储在另一个列表中的一行中,然后再使用 - [=12 转置该列表=] 其中 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=",")