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

Python(Jython2.5)处理CSV生成文件时多余空行问题求助

问题排查与修复方案

核心问题分析

你的代码出现多余空行,是两个因素叠加导致的:

  • 每次循环都以追加模式打开输出文件,频繁的打开/关闭操作结合Windows换行符规则,导致换行符被重复写入;
  • Python 2.x(含Jython 2.5)的csv.writer默认会添加换行符,同时文件在文本模式下打开时,系统会自动将\n转换为\r\n,最终生成\r\r\n的双重换行,在多数编辑器中显示为空行。

具体修复步骤

1. 调整文件打开逻辑,避免循环内重复操作

把输出文件的with块移到循环外,只打开一次文件,全程复用同一个csv.writer对象:

def convertFileToIsoFormat(read_filePath, write_filePath):
    import csv
    import datetime
    from __future__ import with_statement
    
    with open(read_filePath) as csvfile, open(write_filePath, 'wb') as newcsv:
        reader = csv.reader(csvfile, delimiter='\t')
        writer = csv.writer(newcsv, delimiter='\t', lineterminator='\r\n')
        
        for row in reader:
            modifiedRow = row.copy()  # 复制原列表,避免意外修改原数据(可选但更安全)
            columnsToModify = [4,7,11]
            for column in columnsToModify:
                modifiedRow[column] = datetime.datetime.strptime(modifiedRow[column], '%Y-%m-%d %H:%M:%S').isoformat()
            # 特殊格式列处理
            modifiedRow[22] = datetime.datetime.strptime(modifiedRow[21], '%m/%d/%Y %H:%M:%S %p').isoformat()
            writer.writerow(modifiedRow)  # 修正拼写错误:writewrow → writerow

2. 关键参数说明

  • 用wb二进制模式打开输出文件:Jython 2.5的文本模式会自动转换换行符,二进制模式可以规避系统的额外处理,让csv.writer完全控制换行符;
  • 指定lineterminator='\r\n':强制使用Windows标准换行符,确保在不同系统的编辑器中显示一致;
  • 修正writewrow拼写错误:这是明显的笔误,规范写法可避免潜在的运行问题;
  • modifiedRow = row.copy():原代码直接赋值会修改reader返回的原列表,复制一份能避免意外副作用。

额外排查点

  • 检查原CSV文件的换行符:如果原文件本身使用\n换行,在Windows下读取时可能被识别为不完整换行,但你的代码按行读取,影响不大;
  • 适配Jython特性:Jython 2.5的csv模块和CPython存在细微差异,二进制模式打开是最稳妥的规避换行符问题的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:40:33