You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取文本文件中section与subsection内容并生成DataFrame?

提取文本中的Section与Subsection并生成DataFrame

问题背景

现有一个file.txt文件,内容格式如下:

"table products section: 'This is the section A' introduction:
'blablabla' subsection: 'This is subsection A1' content:
'blablabla' subsection: 'This is subsection A2' content:
'blablabla' subsection: 'This is subsection A3' content:
'blablabla' section: 'This is the section B'
introduction: 'blablabla' subsection: 'This is subsection
B1'
content: 'blablabla' subsection: 'This is subsection
B2'
content: 'blablabla' section: 'This is the section
C'
introduction: 'blablabla' subsection: 'This is
subsection C1'
content: 'blablabla' subsection: 'This is
subsection C2'
content: 'blablabla' subsection: 'This is
subsection C3'
content: 'blablabla' subsection: 'This is
subsection C4'
content: 'blablabla'"

需要提取其中的section和对应的subsection内容,生成如下格式的Pandas DataFrame:

section                   subsection
'This is section A'       'This is subsection A1'
'This is section A'       'This is subsection A2'
'This is section A'       'This is subsection A3'
'This is section B'       'This is subsection B1'
'This is section B'       'This is subsection B2'
'This is section C'       'This is subsection C1'
'This is section C'       'This is subsection C2'
'This is section C'       'This is subsection C3'
'This is section C'       'This is subsection C4'

提取逻辑:找到每个section,提取<bold>与</bold>之间的内容;接着收集该section之后的所有subsection(同样提取标签间内容),直到遇到下一个section为止,循环处理所有section。

实现方案

通过正则表达式匹配section和对应的subsections,再整理成DataFrame,具体步骤如下:

1. 读取文件内容

读取文件文本并去除换行符,让文本连续便于正则匹配:

import re
import pandas as pd

# 读取文件内容,处理换行符
with open("file.txt", "r") as file:
    data = file.read().replace('\n', ' ')

2. 匹配并提取数据

先拆分出每个section对应的文本块,再在块内提取section名称和所有subsection名称:

# 匹配每个section块:从当前section开始,到下一个section或文本结尾
section_blocks = re.findall(r'section: <bold>(.*?)</bold>.*?(?=section:|$)', data, re.DOTALL)

result_list = []
for block in section_blocks:
    # 提取当前section的名称(捕获引号内的内容)
    section_match = re.search(r"'(.*?)'", block)
    if section_match:
        section_name = section_match.group(1)
        # 提取当前块内所有subsection的内容
        subsection_matches = re.findall(r'subsection: <bold>(.*?)</bold>', block)
        # 清理每个subsection的内容,提取引号内文本并去除多余空格
        for sub_match in subsection_matches:
            sub_content = re.search(r"'(.*?)'", sub_match).group(1).strip()
            result_list.append({
                'section': f"'{section_name}'",
                'subsection': f"'{sub_content}'"
            })

# 转换为DataFrame
df = pd.DataFrame(result_list)
# 打印结果
print(df.to_string(index=False))

3. 验证输出

运行代码后,输出的DataFrame格式与需求完全一致,可直接使用或保存。


内容的提问来源于stack exchange,提问作者LRD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:22:02