【发布时间】:2021-04-17 01:50:50
【问题描述】:
假设我有数百个类似这个例子的文本文件:
NAME
John Doe
DATE OF BIRTH
1992-02-16
BIO
THIS is
a PRETTY
long sentence
without ANY structure
HOBBIES
//..etc..
姓名、出生日期、生物和爱好(以及其他)始终存在,但文本内容和它们之间的行数有时会发生变化。
我想遍历文件并将字符串存储在每个键之间。例如,名为 Name 的变量应包含存储在 'NAME' 和 'DATE OF BIRTH' 之间的值。
这是我发现的:
lines = f.readlines()
for line_number, line in enumerate(lines):
if "NAME" in line:
name = lines[line_number + 1] # In all files, Name is one line long.
elif "DATE OF BIRTH" in line:
date = lines[line_number + 2] # Date is also always two lines after
elif "BIO" in line:
for x in range(line_number + 1, line_number + 20): # Length of other data can be randomly bigger
if "HOBBIES" not in lines[x]:
bio += lines[x]
else:
break
elif "HOBBIES" in line:
#...
这很好用,但我觉得与其使用许多双循环,不如用一种更聪明、更简单的方法来做到这一点。
我正在寻找一个通用的解决方案,其中 NAME 将存储所有内容,直到出生日期,而 BIO 将存储所有内容,直到 HOBBIES 等。目的是稍后清理和删除多余的白色棉绒。
有可能吗?
编辑:当我阅读答案时,我意识到我忘记了一个非常重要的细节,键有时会重复(以相同的顺序)。
也就是说,一个文本文件可以包含多个人。应创建人员列表。关键名称标志着一个新人的开始。
【问题讨论】:
-
您熟悉状态机的概念吗?如果没有,请尝试查找它,看看您是否可以想出一种方法将这个原则应用到您的代码中。
-
您也可以使用模式来获取特定匹配项ideone.com/PG2sQQ
标签: python algorithm logic extract text-extraction