Python改写CSV指定行时遇模式错误及行间距问题求解
解决Python CSV模块修改指定行时的模式错误与Windows空行问题
问题根源梳理
- 用
rb二进制模式读取CSV:CSV模块需要处理字符串,二进制模式返回字节,触发_csv.Error - 读用
rt但写用wb:写入字符串到二进制文件,触发TypeError - 读写都用文本模式但Windows下出现空行:Windows文本模式自动将
\n转成\r\n,而CSV Writer本身也会写入\r\n,导致双重换行,出现空行
解决方案
核心是统一用文本模式打开文件,并指定newline=''参数,让CSV模块自行处理换行符,避免系统和模块的双重转换。
完整示例代码
import csv import os # 配置参数 csv_path = "your_file.csv" temp_path = "temp_file.csv" modify_row_num = 3 # 要修改的行号(从1开始计数) updated_row = ["修改后的列1", "修改后的列2", "修改后的列3"] # 读取并修改指定行 with open(csv_path, 'r', newline='') as in_file, open(temp_path, 'w', newline='') as out_file: csv_reader = csv.reader(in_file) csv_writer = csv.writer(out_file) for row_idx, row_data in enumerate(csv_reader, start=1): if row_idx == modify_row_num: csv_writer.writerow(updated_row) else: csv_writer.writerow(row_data) # 替换原文件 os.replace(temp_path, csv_path)
关键说明
newline=''的作用:在文本模式下,禁止Python自动转换换行符,CSV模块会根据当前操作系统写入合适的换行符(Windows为\r\n,类Unix为\n),避免双重换行导致的空行- 始终保持读写模式一致:全部使用文本模式(
r/w,rt/wt中的t可省略,默认就是文本模式),不要混合二进制与文本模式
内容的提问来源于stack exchange,提问作者CSAPawn
相关产品推荐
相关产品推荐

