我正在努力从文件中提取文本.文本格式如下,[]表示分隔符.

文件文本:

[Dataset 1] "text" [Filename 1] "text" [Filename 2] "text" [Key Data Delimiter] !key data! [Key Data Delimiter] "text" [Filename 3] "text" [Dataset 2] "text" [Filename 1] [Key Data Delimiter] key data [Key Data Delimeter] "text" [Filename 2] [Dataset 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相关问答推荐

为什么默认情况下所有Python类都是可调用的?

Pandas—合并数据帧,在公共列上保留非空值,在另一列上保留平均值

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

如何在Pyplot表中舍入值

重置PD帧中的值

在Admin中显示从ManyToMany通过模型的筛选结果

如何根据rame中的列值分别分组值

在Python中控制列表中的数据步长

如何用FFT确定频变幅值

如何编辑此代码,使其从多个EXCEL文件的特定工作表中提取数据以显示在单独的文件中

PySpark:如何最有效地读取不同列位置的多个CSV文件

用来自另一个数据框的列特定标量划分Polars数据框中的每一列,

如何从数据框列中提取特定部分并将该值填充到其他列中?

替换包含Python DataFrame中的值的<;

根据过滤后的牛郎星图表中的数据计算新系列

为什么按下按钮后屏幕的 colored颜色 保持不变?

FileNotFoundError:[WinError 2]系统找不到指定的文件:在os.listdir中查找扩展名

时间戳上的SOAP头签名无效

我可以同时更改多个图像吗?

大Pandas 中的群体交叉融合