在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
相关产品推荐
相关产品推荐

