Python写入txt文件时出现额外空行问题如何解决
问题产生原因
这是Windows平台下Python文本模式写入文件的换行自动转换机制导致的典型问题:
- Windows系统原生文本文件的换行标识为
\r\n(回车+换行双字符),而Linux、Mac等类Unix系统的换行标识为\n(单换行符) - 使用默认参数调用
open()开启文本写入模式(即传入"w"模式)时,Python默认开启跨平台换行适配:写入过程中会自动将代码中写入的所有\n替换为当前运行系统的原生换行符 - 这个自动转换逻辑会导致手动添加的
\n被二次处理,最终每行末尾实际写入了两个连续的换行控制符,大部分文本编辑器会将连续两个换行识别为「换行+空行」,就出现了两行有效数据之间夹空白行的现象。如果去掉手动加的\n,没有换行标识自然所有内容会挤在同一行。
正确实现方案
以下三种方案都可以实现无多余空行的写入效果,优先推荐前两种跨平台兼容写法:
- 方案1:打开文件时传入
newline=''参数,关闭Python的自动换行转换逻辑,代码中写入的\n会原样写入文件,不会被额外处理,从根源避免多余空行。这是Python官方推荐的跨平台文本写入写法,在任意系统下运行输出的文件格式都保持一致。
修改后代码:
with open("recordsAudit.txt", "w", newline='') as databasefile: for auditer, auditdate in zip(auditers, audit_Date): databasefile.write("%s, %s\n" % (auditer, auditdate))
- 方案2:放弃手动拼接换行符,改用
print()函数指定写入文件对象,print会自动适配当前系统的换行规则,不会产生多余空行,代码可读性也更高:
with open("recordsAudit.txt", "w") as databasefile: for auditer, auditdate in zip(auditers, audit_Date): print(f"{auditer}, {auditdate}", file=databasefile)
- 方案3:仅在Windows本地使用的场景下,可以将手动写入的
\n替换为Windows原生换行符\r\n,匹配系统默认格式避免重复转换,但这种写法在Linux/Mac系统下运行会出现换行异常,不推荐优先使用。
内容的提问来源于stack exchange,提问作者William Silva
相关产品推荐
相关产品推荐

