Python 3中如何用csv库读取含多种换行符的CSV文件?
处理含多种换行符的CSV文件:用Python csv库解决报错问题
嘿,这个问题我之前处理复杂CSV时也踩过坑!答案是完全可以用csv库处理,关键是调整文件打开方式和csv.reader的参数配置,区分开行分隔符和字段内的换行符。
报错原因分析
你遇到的Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?,本质是csv库默认会把非引号包裹字段里的换行符当成行结束标志,但你的数据里字段内(比如第四列)包含了\n,同时你指定了newline='\r\n'限制了文件的换行识别规则,导致库无法正确区分行分隔和字段内换行。
修正后的代码示例
直接调整文件打开和csv.reader的参数即可解决:
import csv # 打开文件时不指定newline,让Python自动处理通用换行模式 with open('../database.csv', 'r', newline=None, encoding='utf-8') as csvfile: # 配置csv.reader:指定分隔符、引号符,确保库识别引号内的换行 file = csv.reader(csvfile, delimiter='#', quotechar='"', quoting=csv.QUOTE_MINIMAL) for row in file: # 现在可以正常读取包含\n的字段了 print(row[3])
关键参数说明
newline=None:让Python以通用换行模式打开文件,自动识别\r\n、\n等换行符,这是解决问题的核心之一。quoting=csv.QUOTE_MINIMAL:这是默认值,但明确写出来更清晰——它表示只有包含分隔符、换行符等特殊字符的字段才会被引号包裹,csv库会自动忽略引号内的换行符,不会把它当成行结束。
额外注意事项
如果你的CSV里存在未被引号包裹的字段内包含换行符,那你需要先预处理数据(比如给这些字段加上引号),或者把quoting参数改为csv.QUOTE_ALL,强制所有字段都被引号包裹,这样csv库就能统一处理所有字段内的换行符了。
内容的提问来源于stack exchange,提问作者Mike Nathas
相关产品推荐
相关产品推荐

