You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2.7(Anaconda发行版):如何解析含混合换行符(\n与\r\n)的文本文件

解决Python 2.7中CSV文件混合行终止符的问题

在Python 2.7里处理混合了\n和\r\n行终止符的CSV文件,确实会遇到这种让人头疼的情况。我来给你分析下问题原因,再提供几个可行的解决方案:

问题根源

  • 用rb二进制模式打开时,文件不会自动转换任何换行符,csv.reader在处理二进制数据时,可能无法将\r\n识别为统一的行终止符,只会把\n当成换行标记。
  • 用rU通用换行模式时,虽然文件对象会把所有行终止符(\r、\n、\r\n)都转换成\n,但在某些场景下(比如系统默认换行符设置的干扰),csv.reader可能没有正确适配这种转换,导致单独的\n无法被识别。

解决方案1:统一转换行终止符(最稳妥)

先读取整个文件内容,把所有\r\n替换成\n,再用StringIO模拟文件对象传给csv.reader。这样不管原文件用哪种换行符,都能统一成\n,确保csv.reader正确识别每一行:

import csv
from cStringIO import StringIO

with open(infile, 'rb') as f:
    # 读取全部内容并统一换行符
    file_content = f.read().replace('\r\n', '\n')

# 用StringIO把字符串转成类文件对象
reader = csv.reader(StringIO(file_content), delimiter='|')

# 现在可以正常遍历reader了
for row in reader:
    print(row)

解决方案2:手动适配csv.reader参数(备选)

虽然csv.reader的lineterminator参数主要是给写入操作设计的,但结合rU模式,显式设置相关参数也能解决部分场景的问题(兼容性略逊于方案1):

import csv

with open(infile, 'rU') as f:
    reader = csv.reader(f, delimiter='|', lineterminator='\n')
    for row in reader:
        print(row)

优先推荐方案1,它直接从根源上统一了换行符,避免了不同模式或csv模块版本带来的兼容性问题。

内容的提问来源于stack exchange,提问作者eric s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 13:17:31