使用Pandas提取$标识分隔的无列名多表格TXT文件相关问题求助
问题原因
- 标题匹配规则错误:你预先定义的
table_names里的标题格式为$ 标题($与标题内容间1个空格),但实际文件中的标题格式为$ 标题($与标题内容间2个空格),字符串匹配失败导致分组逻辑错位 - 列数限制错误:读取文件时指定
names=range(3)固定为3列,若表格实际列数超过3会导致内容截断,进一步干扰分组 - 缺少单表提取逻辑:生成
tables字典后没有做指定key的筛选,默认会返回所有分组表格
修复实现方案
步骤1:正确读取与分组表格
先按整行读取避免列拆分干扰标题识别,自动识别所有以$ 开头的标题行完成分组:
import pandas as pd # 整行读取文件,不提前拆分列 df = pd.read_csv("record.txt", header=None, sep='\n', squeeze=True) # 识别所有标题行 is_header = df.str.startswith('$ ') # 按标题行完成分组 groups = is_header.cumsum() # 生成表格字典:key为标题名,value为拆分后的表格DataFrame tables = {} for group_id, group_data in df.groupby(groups): header = group_data.iloc[0].strip() # 拆分内容行,自动适配列数 table_content = [line.strip().split() for line in group_data.iloc[1:] if line.strip()] tables[header] = pd.DataFrame(table_content)
步骤2:提取指定表格修改
直接通过标题名从字典中取出对应表格,修改后放回字典即可:
# 提取指定表格,示例为提取$ Address表 target_table = tables["$ Address"] # 此处执行你的自定义修改逻辑,示例:修改第一行第二列内容 target_table.iloc[0, 1] = "MODIFIED" # 将修改后的表放回字典 tables["$ Address"] = target_table
步骤3:导出为TXT文件
保持原文件格式导出:
output = [] for header, table in tables.items(): # 写入标题行 output.append(header) # 写入表格内容,行首加2空格,列间用2空格分隔,匹配原格式 for _, row in table.iterrows(): content = " " + " ".join([str(col) for col in row if pd.notna(col)]) output.append(content) # 写入输出文件 with open("modified_record.txt", "w", encoding="utf-8") as f: f.write("\n".join(output))
注意事项
- 若实际文件中标题的$与内容间空格数量有变化,调整
str.startswith('$ ')中的匹配规则即可 - 导出时的分隔符可根据需求调整,当前设置与示例原格式完全一致
内容的提问来源于stack exchange,提问作者Lucas K.C.L.
相关产品推荐
相关产品推荐

