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

问询:将定长分隔TXT数据高效导入Pandas DataFrame的优化方案

更高效的定长TXT转Pandas DataFrame实现方案

针对你处理大体积定长分隔TXT文件的需求,现有代码存在多次创建小DataFrame并拼接导致效率低下、未覆盖所有目标字段、硬编码切片位置维护性差的问题,以下是更高效的优化实现:

核心优化思路

  1. 先批量收集所有条目数据,最后一次性转换为DataFrame,避免频繁拼接小DataFrame的性能损耗
  2. 用规则字典统一管理字段与切片位置,降低硬编码维护成本
  3. 按完整条目(每5行一组)进行解析,逻辑更清晰

完整实现代码

import os
import pandas as pd

# 定义各类型行的字段提取规则:键为行起始标识,值为(字段名, 切片范围)的列表
FIELD_RULES = {
    "| ID        ": [
        ("ID", slice(12, 28)),
        ("Name", slice(28, 80))
    ],
    "| Type      ": [
        ("Type", slice(12, 28)),
        ("Text1", slice(28, 80))
    ],
    "| Category  ": [
        ("Category", slice(12, 28)),
        ("User", slice(40, 80))
    ],
    "| Date      ": [
        ("Date", slice(12, 28)),
        ("Time", slice(40, 80))
    ],
    "| text       ": [
        ("Additiionalline", slice(2, 10)),
        ("From", slice(12, 28)),
        ("To", slice(28, 44)),
        ("Text2", slice(44, 80))
    ]
}

def parse_single_file(file_path):
    entries = []
    current_entry = {}
    
    with open(file_path, "r", encoding="utf-8") as f:
        for line in f:
            line = line.rstrip()
            if not line:
                continue
            
            # 匹配当前行的类型并提取字段
            for line_prefix, field_defs in FIELD_RULES.items():
                if line.startswith(line_prefix):
                    for field_name, slice_range in field_defs:
                        current_entry[field_name] = line[slice_range].strip()
                    break
            
            # 当收集完一个条目的所有12个字段时,存入列表并重置
            if len(current_entry) == 12:
                entries.append(current_entry)
                current_entry = {}
    
    return pd.DataFrame(entries)

# 处理单个文件
single_df = parse_single_file(r'pathtofile\test.txt')
print(single_df)

# 处理文件夹下所有TXT文件
folder_path = r'path_to_your_txt_folder'
all_data = []
for filename in os.listdir(folder_path):
    if filename.lower().endswith('.txt'):
        full_path = os.path.join(folder_path, filename)
        df = parse_single_file(full_path)
        all_data.append(df)

final_df = pd.concat(all_data, ignore_index=True)
print(final_df)

优化点说明

  • 性能提升:通过列表收集所有条目字典,最后一次性生成DataFrame,避免了原代码中多次pd.concat小DataFrame的性能开销,大文件场景下效率提升明显
  • 可维护性:所有字段的切片规则集中在FIELD_RULES字典中,后续调整字段位置或新增字段只需修改该字典,无需改动核心解析逻辑
  • 扩展性:支持批量处理文件夹下的所有TXT文件,无需重复编写单文件处理逻辑
  • 健壮性:跳过空行,避免无效数据干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:25:33