固定列宽无分隔符文本报告转制表符分隔的脚本优化问题
优化方案
核心问题定位
你当前代码的性能瓶颈主要来自字符串重复拼接:Python中字符串是不可变对象,每一次+操作都会生成新的字符串对象,17列的场景下每行需要执行16次拼接+1次换行拼接,处理上万行时会产生大量临时对象,拖慢速度。
方案1:原生Python无额外依赖优化(性能提升10倍以上)
- 提前统一维护所有列的位置区间,避免单独定义列变量
- 用
str.join()批量拼接字段,替代逐次+操作 - 不需要将所有行存入列表占用内存,直接边读边写入输出文件
# 统一维护所有列的起始、结束位置,按顺序补充完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
相关产品推荐
相关产品推荐

