Python中rjust(8)对列表末项失效及输出空行问题排查
CSV处理异常排查:多余空行与数值对齐失效
问题场景
我有一个存储逗号分隔值(CSV)的文本文件,使用以下Python代码读取并重新格式化输出:
with open(outfile , 'w') as fout: with open(infile) as file: for line in file: linelist = line.split(",") fout.write(" ELEM " + '{:>8}'.format(str(linelist[0]) + "\n")) if len(linelist) == 7: fout.write(" VALUE " + str(linelist[1][:8]).rjust(8) + str(linelist[2][:8]).rjust(8) + str(linelist[3][:8]).rjust(8) + str(linelist[4][:8]).rjust(8) + str(linelist[5][:8]).rjust(8) + str(linelist[6][:8]).rjust(8) ) fout.write("\n")
执行后出现两个关联异常:
- 偶尔生成多余的空行
- 空行前的最后一个数值(如16.2535)未通过
rjust(8)实现右对齐
问题根源
这两个问题的核心原因是未处理CSV行末尾的换行符:
- 读取文件时,每行内容默认包含末尾的换行符(
\n),直接用line.split(",")分割后,最后一个元素linelist[6]会带上这个换行符(比如原CSV行是"ID,1,2,3,4,5,16.2535\n",分割后linelist[6]的值是"16.2535\n")。 - 当对
linelist[6][:8].rjust(8)处理时,字符串里的换行符会被保留:写入文件时,换行符会先触发换行,导致数值部分提前换行,自然无法实现右对齐;同时后续代码又手动写入了一个\n,就会生成多余的空行。
修复方案
只需要在分割前先去除每行首尾的空白字符(包括换行符、空格等),再进行后续处理:
with open(outfile, 'w') as fout: with open(infile) as file: for line in file: # 先清除首尾空白(含换行符)再分割,避免最后一个元素带换行 linelist = line.strip().split(",") # 用f-string简化格式化逻辑 fout.write(f" ELEM {str(linelist[0]):>8}\n") if len(linelist) == 7: # 批量处理VALUE列的格式化,代码更简洁 formatted_values = [str(val[:8]).rjust(8) for val in linelist[1:]] fout.write(f" VALUE {''.join(formatted_values)}\n")
关键修改说明
line.strip():彻底清除每行开头和结尾的所有空白字符,包括换行符、空格、制表符等,从根源上避免分割后的元素带多余换行。- 改用f-string替代字符串拼接:格式化逻辑更直观,代码可读性更高,减少拼接错误。
- 列表推导式批量处理数值:简化重复的格式化代码,便于维护。
内容的提问来源于stack exchange,提问作者Lumpi
相关产品推荐
相关产品推荐

