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

Python如何合并文本文件指定行并转换为pandas dataframe

问题解答

首先明确:不建议先转DataFrame再做行合并,直接在文本层完成记录合并再转为DataFrame,逻辑更简单、执行效率更高。

核心原因

原始文本的记录是跨行拆分的,转入DataFrame后你仍需要处理跨行关联逻辑,反而增加了复杂度,不如先在字符串层面完成整记录拼接,再做结构化转换。

完整实现方案

步骤1:文本预处理,合并跨行记录

思路是用缓存变量拼接当前未结束的记录,遇到Done.就把完整记录存入结果列表:

# 读取原始文件
with open("你的文件路径.txt", "r", encoding="utf-8") as f:
    raw_lines = f.readlines()

full_records = []
current_record = ""
for line in raw_lines:
    stripped_line = line.strip()
    if not stripped_line:
        continue
    # 拼接当前行到缓存
    current_record += f" {stripped_line}"
    # 检测是否到记录末尾
    if current_record.strip().endswith("Done."):
        full_records.append(current_record.strip())
        current_record = ""

执行完成后full_records里每个元素就是一条完整的video开头、Done.结尾的记录。

步骤2:转换为Pandas DataFrame

你可以根据自己需要拆分字段,以下是拆分基础信息+坐标框的示例:

import pandas as pd
import re

df_rows = []
for record in full_records:
    # 匹配基础字段
    match_res = re.match(r"video (\d+/\d+) \((\d+)/(\d+)\) (.*) Done\.", record)
    if not match_res:
        continue
    # 提取通用字段
    video_batch = match_res.group(1)
    frame_index = int(match_res.group(2))
    total_frame = int(match_res.group(3))
    # 提取所有坐标框
    bbox_list = re.findall(r"\(\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s*\)", match_res.group(4))
    # 坐标转整数格式
    bbox_list = [tuple(map(int, bbox)) for bbox in bbox_list]
    df_rows.append({
        "视频批次": video_batch,
        "帧序号": frame_index,
        "总帧数": total_frame,
        "检测框坐标": bbox_list
    })

# 生成DataFrame
df = pd.DataFrame(df_rows)

如果不需要保留坐标结构,想把每个坐标拆成单独列,只要调整字段拼接逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 23:54:05