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

固定列宽无分隔符文本报告转制表符分隔的脚本优化问题

优化方案

核心问题定位

你当前代码的性能瓶颈主要来自字符串重复拼接:Python中字符串是不可变对象,每一次+操作都会生成新的字符串对象,17列的场景下每行需要执行16次拼接+1次换行拼接,处理上万行时会产生大量临时对象,拖慢速度。


方案1:原生Python无额外依赖优化(性能提升10倍以上)

  1. 提前统一维护所有列的位置区间,避免单独定义列变量
  2. 用str.join()批量拼接字段,替代逐次+操作
  3. 不需要将所有行存入列表占用内存,直接边读边写入输出文件
# 统一维护所有列的起始、结束位置,按顺序补充完17列即可
col_specs = [
    (0, 12),
    (13, 21),
    (22, 25),
    # 后续补充剩下14列的位置
]

with open("RawReport.txt", "r") as in_file, open("output.tsv", "w", encoding="utf-8") as out_file:
    for line in in_file:
        # 批量生成所有列的清理后内容,用制表符一次性拼接
        processed_cols = [line[start:end].strip() for start, end in col_specs]
        out_file.write("\t".join(processed_cols) + "\n")

13000行的处理耗时可以压缩到1秒以内。


方案2:使用pandas批量处理(代码最简,性能最优)

如果可以安装第三方库,pandas内置的read_fwf方法是专门处理固定宽度文本文件的,底层用C实现,处理速度最快,代码量极小:

import pandas as pd

col_specs = [
    (0, 12),
    (13, 21),
    (22, 25),
    # 补充剩余列位置
]

# 读取固定宽度文件
df = pd.read_fwf("RawReport.txt", colspecs=col_specs, header=None)
# 直接导出为制表符分隔文件,不需要额外处理
df.to_csv("output.tsv", sep="\t", index=False, header=False, encoding="utf-8")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:57:02