如何修复Python pandas read_fwf读取fwf文件时列间空白缺失的错误
问题解决方案
方案1:指定固定列宽读取(优先推荐)
fwf格式本身的设计逻辑就是按固定字符宽度拆分列,不需要依赖列间的空格分隔符,直接通过read_fwf的colspecs参数指定每一列的起止位置即可完全规避分隔符被挤占的问题。
操作步骤:
- 先根据正常行的内容统计每一列的字符宽度(左闭右开的索引区间),你给出的示例文件的列区间可参考如下配置:
import pandas as pd # 每一项对应(列起始索引, 列结束索引),可根据你实际的文件宽度调整 colspecs = [ (0, 7), (7, 14), (14, 21), (21, 29), (29, 32) ] df = pd.read_fwf("your_file.fwf", colspecs=colspecs, header=None)
这种方式不需要修改原始文件,也不需要额外适配异常场景,稳定性最高。
方案2:预处理文件补充分隔空格
如果不想计算列宽,也可以先对原始文件做逐行预处理,匹配到数字后紧跟负号的异常场景时插入空格,再传入pandas读取:
import re import pandas as pd from io import StringIO with open("your_file.fwf", "r", encoding="utf-8") as f: lines = f.read() # 匹配数字后紧跟负号的场景,插入空格 processed_lines = re.sub(r"(\d)-", r"\1 -", lines) df = pd.read_fwf(StringIO(processed_lines), header=None)
这种方式适合临时应急使用,需要注意正则规则要适配你的文件实际格式,避免误替换正常内容。
内容的提问来源于stack exchange,提问作者Oaklin Keefe
相关产品推荐
相关产品推荐

