Python 2.7实现link字段不足10位左侧补零的代码问题排查
原代码存在的问题
- 读取逻辑错误:仅调用两次
readline()只能读取文件前两行,没有遍历全文件的逻辑,无法处理10万条全量数据 - 循环逻辑完全错误:
for wordcheck1 in line1是遍历单行字符串的每个字符,而非判断行是否为dn类型;for wordcheck in line同理,完全无法实现按行类型处理的需求 - IO性能极差:循环中反复以追加模式打开输出文件,频繁触发IO操作,处理10万条数据时速度会非常慢
- 没有行类型判断:所有行都会执行键值分割和补零操作,遇到dn行或者空行时会直接报错
- 输出内容重复:嵌套循环会导致同一条数据被重复写入多次,输出文件存在大量冗余内容
- 空行未处理:原数据中dn和link分组之间的空行没有适配逻辑,会导致程序报错或者输出多余空行
修正后可运行代码(Python 2.7)
with open("test.txt", "r") as f_in, open("pad-link.txt", "w") as f_out: for line in f_in: strip_line = line.strip() # 保留原文件空行,不需要可以删除该分支的write操作 if not strip_line: f_out.write("\n") continue if strip_line.startswith("dn:"): f_out.write(line) elif strip_line.startswith("link:"): # 只分割第一个冒号,避免值中存在冒号时分割异常 _, val = strip_line.split(":", 1) # zfill方法原生实现左侧补零到指定长度 padded_val = val.strip().zfill(10) f_out.write("link:%s\n" % padded_val)
代码适配说明
- 逐行迭代读取文件,内存占用极低,适合处理10万条级别的大文件
- 一次性打开输入输出文件,全程仅触发两次文件打开操作,IO性能优异
- 按行前缀判断行类型,仅对link字段做补零处理,逻辑严谨不会报错
- 保留原文件的空行和dn行格式,输出文件和原文件结构完全一致
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

