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

Windows与Linux读取gzip压缩CSV文件行数不一致如何解决

解决方案

问题根因

  • 核心是打开gzip文件时未指定newline=''参数,触发不同操作系统的默认换行符转换逻辑,与csv模块的处理规则冲突
  • Python csv模块会自主处理符合RFC 4180规范的CSV换行(包括字段内部包裹在引号内的合法换行),要求文件对象必须关闭自动换行转换,否则会把字段内部的换行误判为行分隔符
  • Windows平台默认文本模式的换行处理逻辑恰好和CSV规则适配,所以统计结果正常;Linux平台默认会把\r、\n、\r\n都单独识别为换行符,导致字段内的换行被拆分为独立行,行数出现数倍暴涨
  • 次要可能是编码参数和文件实际编码不匹配,导致乱码中出现类换行符的异常字符,被误判为行分隔符

修复代码

只需要在gz.open参数中增加newline=''即可,修改后代码如下:

with gz.open(path, 'rt', encoding='utf8', newline='') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    print(len(list(csv_reader)))

补充校验方案

如果修改后仍有少量行数偏差,可以通过校验每行字段数过滤异常行:

valid_count = 0
expect_cols = 8 # 替换为你的CSV实际列数
with gz.open(path, 'rt', encoding='utf8', newline='') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for row in csv_reader:
        if len(row) == expect_cols:
            valid_count += 1
print(valid_count)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:09:02