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

CSV文件换行符处理需求:保留双引号内LF,替换行尾LF为CRLF

解决CSV换行符转换问题:保留引号内LF,行尾LF转CRLF

这里有几个实用的方法帮你搞定这个CSV格式调整需求,既能精准保留双引号包裹内容里的换行符,又能把每行末尾的LF替换成CRLF:

方法一:用Python csv标准库(最稳妥)

Python的csv模块天生就支持识别带双引号的字段,完全不用自己手动处理引号内的换行逻辑,我自己处理这类问题时首选这个方案:

import csv

# 替换成你的源文件和目标文件路径
input_path = "source.csv"
output_path = "converted.csv"

with open(input_path, 'r', newline='', encoding='utf-8') as infile, \
     open(output_path, 'w', newline='\r\n', encoding='utf-8') as outfile:
    # 创建CSV读取器和写入器
    reader = csv.reader(infile)
    writer = csv.writer(outfile)
    
    # 逐行读取并写入,csv模块会自动保留字段内的LF
    for row in reader:
        writer.writerow(row)

原理说明:

  • 打开输入文件时指定newline='',让csv模块自行处理换行符识别,不会把引号内的LF误判成行分隔符
  • 打开输出文件时指定newline='\r\n',确保写入每一行后自动添加CRLF作为行尾分隔符
  • 带引号字段内的LF会被完整保留,因为csv.reader会将整个引号包裹内容识别为一个完整字段

方法二:用Awk命令行工具(适合快速处理)

如果你习惯用命令行操作,也可以用Awk实现,核心是跟踪当前是否处于双引号包裹的状态,状态内的LF保留,状态外的LF替换成CRLF:

BEGIN {
    in_quote = 0
}
{
    # 统计当前行的双引号数量
    quote_count = gsub(/"/, "&")
    # 奇数个引号说明进入/退出引号状态
    if (quote_count % 2 != 0) {
        in_quote = !in_quote
    }
    # 不在引号内则输出CRLF,在引号内保留原LF
    if (!in_quote) {
        printf "%s\r\n", $0
    } else {
        printf "%s\n", $0
    }
}

使用方式:把上面的脚本保存为convert_csv.awk,然后执行:

awk -f convert_csv.awk source.csv > converted.csv

原理说明:

  • 通过in_quote变量跟踪当前是否处于双引号内部
  • 每遇到奇数个双引号,就切换状态标记
  • 不在引号内时用printf "%s\r\n"输出CRLF;在引号内则用printf "%s\n"保留原换行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:17:39