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

Python CSV Writer保留转义字符问题:截断C4列后转义丢失

CSV截断C4列并保留原始转义格式解决方案

问题场景

现有CSV文件片段如下:

c1,c2,c3,c4,c5
17939,2507974,11,DVD version has 1 hour of extras of 5 bonus matches including: - Stacy Keibler vs Torrie Wilson in a bikini contest. - A tour of Trish Stratus\' place. - Behind the scenes look at the WWE women division.,NULL
16641,2425413,11,"The Australian TV version had a scene included at the end where a cop car was driving in an alley way, narrowly missing someone walking. This scene was also used in the 1980 film, \"Alligator\".",NULL
127472,2130098,13,"FACT: Dunn uploads a file from an Apple Powerbook in \"C:\\\", which would be appropriate for a DOS/Windows system.",NULL

需要实现:将第4列(C4)截断至最大长度(如500字符),其余列和未超长的C4列完全保留原始格式(包括转义字符、引号),输出为新CSV文件。

当前代码存在两个问题:

  • 转义字符丢失(如原反斜杠消失)
  • 使用quoting=csv.QUOTE_ALL会强制给所有列加引号,破坏原始短行的格式

解决思路

核心是区分处理两类行:

  1. 未超长的行:直接写入原始文本,完全保留原有格式
  2. 需要截断的行:先解析为CSV行对象,修改C4列后用CSV规范重新生成行内容,确保转义正确

代码实现

import csv

INPUT_PATH = "old_file_name.csv"
OUTPUT_PATH = "new_file_name.csv"
MAX_C4_LENGTH = 500

# 读取所有原始行
with open(INPUT_PATH, 'r', newline='') as infile:
    all_lines = infile.readlines()

with open(OUTPUT_PATH, 'w', newline='') as outfile:
    # 初始化CSV写入器,使用与原文件一致的分隔符、引号、转义符
    csv_writer = csv.writer(
        outfile,
        delimiter=',',
        quotechar='"',
        escapechar='\\',
        quoting=csv.QUOTE_MINIMAL  # 仅在必要时加引号,贴近原始格式
    )
    
    # 处理表头
    header_row = next(csv.reader([all_lines[0]], delimiter=',', quotechar='"', escapechar='\\'))
    csv_writer.writerow(header_row)
    
    # 处理数据行
    for line in all_lines[1:]:
        # 解析当前行为CSV行对象
        row = next(csv.reader([line], delimiter=',', quotechar='"', escapechar='\\'))
        # 检查C4列长度(解析后的实际字符数)
        if len(row[3]) > MAX_C4_LENGTH:
            # 截断C4列
            row[3] = row[3][:MAX_C4_LENGTH]
            # 用写入器生成符合规范的行
            csv_writer.writerow(row)
        else:
            # 未超长,直接写入原始行,保留原始格式
            outfile.write(line)

说明

  • 对于未超长的行,直接写入原始文本,完全保留原有的转义、引号格式,不会被CSV写入器修改
  • 对于超长行,解析后截断C4列,再通过CSV写入器生成符合规范的内容,确保截断后的文本转义正确,不会丢失必要的格式
  • 使用csv.QUOTE_MINIMAL参数,仅在内容包含分隔符、引号等特殊字符时才添加引号,尽可能贴近原始文件的格式风格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:30:45