如何删除大型CSV文件中多余的\n同时保留\r\n换行符不变
问题根因
你原有代码失效的核心原因是Python文本模式默认开启了通用换行符转换:读取文件时会自动将Windows风格的\r\n换行符转换为单个\n,因此正则表达式(?<!\r)\n会匹配到所有换行符,全部替换为空格后自然丢失了所有换行。
修复方案
打开文件时指定newline=''参数关闭通用换行转换,让\r\n原样保留在读取的内容中,同时正则使用raw字符串避免转义问题。
修正后可直接运行的代码
import re filetoread = "你的源文件路径.csv" filetowrite = "修复后的文件路径.csv" # 读写都指定newline=''避免换行符自动转换,按需调整encoding参数匹配你的文件编码 with open(filetoread, "r", encoding="utf-8", newline='') as inf: with open(filetowrite, "w", encoding="utf-8", newline='') as fixed: for line in inf: # 匹配所有前面不带\r的单独\n,替换为空格(不需要空格可改为"") line = re.sub(r"(?<!\r)\n", " ", line) fixed.write(line)
补充说明
- 该方案逐行读取文件,内存占用极低,完全支持你19万行的大文件处理
- 如果替换后CSV字段出现异常,可以把替换目标从空格改为空字符串,避免多余空格影响字段分隔
- 处理完成后可以用
head -n 10 修复后的文件路径.csv(Linux)或者Get-Content 修复后的文件路径.csv -Head 10(Windows PowerShell)快速验证换行符是否正常保留
内容的提问来源于stack exchange,提问作者Lisa
相关产品推荐
相关产品推荐

