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

如何更Pythonic地循环解析固定宽度TXT文件生成结构化字典

最优方案:直接用pandas内置固定宽度文件读取接口

pandas 原生提供pd.read_fwf()接口专门用于读取固定宽度分隔的文本文件,不需要手动读取后逐字段拆分,只需要预先定义好字段对应的切片区间即可,后续新增字段仅需修改配置项:

import pandas as pd

# 仅需维护这一份字段配置:(字段名, 切片起始位置, 切片结束位置),结束位置传None代表读取到行尾
field_config = [
    ("name", 0, 20),
    ("address", 21, 36),
    ("country", 36, 52),
    ("age", 53, None)
]

# 直接读取文件生成规整DataFrame
df = pd.read_fwf(
    "./my_file_path/my_file.txt",
    colspecs=[(start, end) for _, start, end in field_config],
    names=[field for field, _, _ in field_config],
    header=0
)

这个方案是性能最优、代码最简洁的实现,底层用pandas优化过的IO逻辑处理,大文件场景下也能稳定运行。


备选方案:基于已读取的单行列做解析

如果你需要基于已经读好的单列DataFrame做处理,可以用pandas向量化字符串操作配合预定义的切片映射实现,不需要手动逐行循环:

import pandas as pd

# 预定义字段对应的切片对象,新增字段仅需在此添加配置
field_slices = {
    "name": slice(0, 20),
    "address": slice(21, 36),
    "country": slice(36, 52),
    "age": slice(53, None)
}

# 一次性生成所有字段的解析结果
col_dict = {
    field: df["cols"].str.slice(*slc.indices(10000)).str.strip().tolist()
    for field, slc in field_slices.items()
}

# 也可以直接生成DataFrame,不需要中转字典
parsed_df = pd.DataFrame({
    field: df["cols"].str.slice(*slc.indices(10000)).str.strip()
    for field, slc in field_slices.items()
})

说明

  • 使用Python内置的slice对象存储切片规则,比单独存储起止索引更直观,也可以直接复用切片逻辑
  • 用pandas向量化str.slice替代手动循环索引,不仅代码更简洁,处理10万行以上数据时性能会提升10~100倍,同时也避免了你原代码中变量名写错(比如df.cols[I]大写I的笔误)的问题
  • 后续新增字段只需要修改配置字典,不需要改动解析逻辑,符合开闭原则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 23:30:02