Python转换Excel到CSV时保留TEXT列换行空格的方案咨询
问题描述
我有一份Excel数据,最后一列TEXT包含换行和空格;使用现有Python脚本转换为CSV后,TEXT列的换行格式丢失,数据被打乱。需要修改脚本,让TEXT列保留原有的换行和空格格式。
原脚本如下:
import pandas as pd import os import numpy as np WD = r'XXX' os.chdir(WD) for file in os.listdir(WD): if file.endswith('.xlsx'): FILE = file sheet_names = pd.ExcelFile(FILE).sheet_names for sn in sheet_names: OUTPUT_FILE = '{}_{}'.format(sn,FILE.replace('.xlsx','.csv')) df = pd.read_excel(FILE,) print(FILE, sn) for col in df.columns.to_list(): df[col] = df[col].map({True: '', False: ''}).fillna(df[col]) cn = ['IN', 'NAME', 'TEXT'] df = df.reindex(columns = cn) df.to_csv(OUTPUT_FILE,sep='|',encoding='utf-8-sig',index=False)
解决方法
问题分析
原脚本存在两个核心问题:
- 读取Excel时未指定对应工作表,导致每次循环都读取默认工作表;
- 导出CSV时未处理含换行的字段,默认行为会破坏
TEXT列的换行格式。
修改后的脚本
import pandas as pd import os import csv # 导入csv模块用于设置引号规则 WD = r'XXX' os.chdir(WD) for file in os.listdir(WD): if file.endswith('.xlsx'): FILE = file excel_file = pd.ExcelFile(FILE) sheet_names = excel_file.sheet_names for sn in sheet_names: OUTPUT_FILE = '{}_{}'.format(sn, FILE.replace('.xlsx', '.csv')) # 指定读取当前循环的工作表 df = excel_file.parse(sn) print(FILE, sn) # 处理布尔值为空白的逻辑(保留原有需求) for col in df.columns.to_list(): df[col] = df[col].map({True: '', False: ''}).fillna(df[col]) # 重新指定列顺序(修正缩进,避免重复执行) cn = ['IN', 'NAME', 'TEXT'] df = df.reindex(columns=cn) # 导出CSV时设置参数保留换行格式 df.to_csv( OUTPUT_FILE, sep='|', encoding='utf-8-sig', index=False, quoting=csv.QUOTE_ALL, # 给所有字段加引号,确保含换行的字段被正确识别 lineterminator='\n' # 统一行分隔符,避免跨平台格式问题 )
关键修改点
- 指定工作表读取:用
excel_file.parse(sn)替代pd.read_excel(FILE),确保每次读取当前循环的目标工作表; - 修复缩进错误:将列重排逻辑移出列循环,避免重复执行导致的异常;
- CSV导出参数优化:添加
quoting=csv.QUOTE_ALL,让所有字段被引号包裹,确保TEXT列中的换行符不会被当成行分隔符,从而完整保留原有格式; - 导入csv模块:用于调用引号规则的常量。
内容的提问来源于stack exchange,提问作者HEV
相关产品推荐
相关产品推荐

