我有一个标题列表,我必须在这些标题之间提取文本。但这些标题不遵循命令(有时标题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)
答案 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=",")