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

在Python中加载含换行符的CSV文件并去除换行字符

处理含换行符的TSV文件并转为Python列表

你的问题核心是字段内部包含换行符,而str.strip()只能移除字符串首尾的空白(包括换行),没法处理字段中间的换行。而且TSV文件里的带引号字段,csv模块其实能正确识别其中的换行,但你需要主动替换掉这些换行符,而不是只做首尾清理。

给你修改后的代码,完美解决这个问题:

import csv

# 用来存储处理后的所有行
processed_rows = []

# 打开文件时指定newline=''是csv模块的最佳实践,避免换行处理混乱;指定utf-8编码适配特殊字符(比如你例子里的å)
with open('test.dat', 'r', newline='', encoding='utf-8') as csv_file:
    # 指定制表符分隔符,同时明确quotechar为双引号,让csv.reader正确识别带引号的字段(包括里面的换行)
    csv_reader = csv.reader(csv_file, delimiter="\t", quotechar='"')
    
    for raw_row in csv_reader:
        # 对每个字段:先替换所有换行符(包括\n和\r),再清理首尾空白(可选,根据你的需求调整)
        cleaned_row = [field.replace('\n', '').replace('\r', '').strip() for field in raw_row]
        processed_rows.append(cleaned_row)

# 现在processed_rows就是你要的、去掉所有换行的列表
print(processed_rows)

关键细节说明:

  • newline='':csv模块要求打开文件时设置这个参数,这样它能自己处理不同系统的换行格式,避免把字段内的换行误判为新行。
  • quotechar='"': 告诉csv.reader,被双引号包裹的内容是一个完整字段,哪怕里面有换行,也不会把它拆成新行。
  • replace('\n', '').replace('\r', ''):彻底移除字段内所有的换行符(不管是Unix的\n还是Windows的\r\n),比strip处理更彻底。

如果之后你需要按列名访问数据,也可以用csv.DictReader,处理逻辑是一样的,只是行数据会变成字典格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:50:01