我正在努力从文件中提取文本。文本格式如下,其中[]表示分隔符。
文件文本:
[数据集 1]“文本”[文件名 1]“文本”[文件名 2]“文本”[关键数据分隔符]!关键数据! [关键数据分隔符]“文本”[文件名 3]“文本”[数据集 2]“文本”[文件名 1][关键数据分隔符]关键数据[关键数据分隔符]“文本”[文件名2] [数据集 3]...
期望的输出:
[Dataset 1], [Filename 2], !key data!.
[Dataset 2], [Filename 1], !key data!.
文件名位于该文件名之后,键分隔符出现在另一个数据集之前。每个数据集只有一个包含关键数据的文件。
f = open('file.txt', 'r')
TextBetween_KeyDataDelimeter = re.findall('KeyDataDelimeter(.+?)KeyDataDelimiter',f.read(), re.DOTALL)
我正在考虑使用 if/else 语句嵌套 for 循环,但这看起来很困惑。有人可以指出我应该阅读的文档来帮助我吗?
最佳答案
这是一个没有正则表达式的选项,只有一些字符串和列表操作。有点复杂,但它有效:
kds = """[Dataset 1] "text1" [Filename 1] "text2" [Filename 2] "text3" [Key Data Delimiter] !key data1![Key Data Delimiter] "text4" [Filename 3] "text5" [Dataset 2] "text6" [Filename 1] [Key Data Delimiter] key data2 [Key Data Delimeter] "text7" [Filename 2]"""
# split the text file into datasets
nkds = kds.replace('[Dataset','xxx[Dataset').split('xxx')
for k in nkds[1:]:
entry = ''
#split each dataset into components
nk = k.replace('[','xxx[').split('xxx')[1:]
#get the name of the dataset
entry+= nk[0].replace(']',']xxx').split('xxx')[0]
for k in nk:
#find the index position of the delimiter in the dataset list
if '[Key Data Delimiter]' in k:
#get the previous index position for the file name
file_ind = nk.index(k)-1
entry+= nk[file_ind].replace(']',']xxx').split('xxx')[0]
entry+= k.split(']')[1].strip()
break
print(entry)
输出:
[Dataset 1][Filename 2]!key data1!
[Dataset 2][Filename 1]key data2
关于python - 使用重复嵌套模式从文本文件中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72944738/