Python写入CSV:如何仅让每行指定列内容换行?
如何在CSV中保留单元格内的换行并让多行内容归属于同一单元格?
嘿,我来帮你搞定这个CSV换行的问题!你的核心需求是让笔记字段里的换行显示为同一单元格内的多行内容,而不是跳到下一行的其他列,这个是完全可以实现的,问题出在文件打开的细节和CSV格式的规则处理上。
问题原因分析
CSV的规则里,只有当单元格内容被引号包裹,且换行符在引号内部时,才会被识别为同一单元格的多行内容。你已经用了quoting=csv.QUOTE_ALL,但有两个关键细节没处理到位:
- 打开文件时没有指定
newline=''参数,导致Python自动转换换行符,破坏了CSV的格式逻辑 - 缺少表头写入,和你预期的结果结构不匹配
修正后的代码方案
下面是调整后的完整代码,我会标注关键改进点:
import csv import logging # 你的原始数据 rows = [["1","这是第一条笔记。[CR][LF] 这是下一行","type1"], ["2","这是第二条笔记[CR][LF]。这是下一行","type2"]] # 关键改进1:打开文件时添加newline='',避免Python自动转换换行符 with open('test.csv', 'w', newline='', encoding='utf-8') as writer: csv_writer = csv.writer(writer, delimiter=";", quoting=csv.QUOTE_ALL) # 先写入表头,和你预期的结果对应 csv_writer.writerow(["id", "笔记", "类型"]) count = 1 for row in rows: if len(row) > 0: # 替换换行标记为真实的换行符 row[1] = row[1].replace("[CR]", "\r").replace("[LF]", "\n") logging.info(f"writing rows into csv {count}") csv_writer.writerow(row) count += 1
代码改进说明
- 使用
with语句:自动管理文件的打开和关闭,比手动调用close()更安全,避免资源泄漏 - 添加
newline=''参数:告诉Python不要自动处理换行符,让csv模块按照CSV规范来处理换行 - 指定
encoding='utf-8':避免中文内容出现乱码问题 - 写入表头:和你预期的表格结构对齐
预期效果验证
当你用Excel、LibreOffice Calc或Google Sheets这类表格工具打开生成的test.csv时,会看到笔记字段的内容显示为同一单元格内的两行,完全符合你的预期。如果用文本编辑器打开,会看到包含换行的单元格被完整的引号包裹,比如:
"id";"笔记";"类型" "1";"这是第一条笔记。 这是下一行";"type1" "2";"这是第二条笔记 。这是下一行";"type2"
这个格式就是CSV规范中表示单元格内多行内容的标准写法。
内容的提问来源于stack exchange,提问作者Uttam Sapkota
相关产品推荐
相关产品推荐

