Python多CSV转单Excel分表保留数据格式问题求助
解决CSV转Excel时数字被转为字符串的格式问题
这个问题我之前也碰到过,核心原因是csv.reader会把CSV里的所有内容都读取成字符串类型,而你用xlwt直接写入这些字符串时,Excel就会默认以文本格式存储,导致原本的数字变成了文本型数字,进而出现那个讨厌的绿色三角提示。下面给你两种可行的解决方案:
方案一:修改现有xlwt代码,添加类型转换逻辑
我们可以写一个辅助函数,尝试把每个单元格的字符串内容转换成对应的数字类型(整数或浮点数),如果转换失败就保留原字符串,这样xlwt会根据数据类型自动设置单元格格式,数字就能以数值类型存储了。
修改后的完整代码:
#!/usr/bin/env python import os import csv import xlwt def convert_to_number(s): """尝试将字符串转换为数字,失败则返回原字符串""" try: return int(s) except ValueError: try: return float(s) except ValueError: return s fpath = "C:/Project/Phase 3/Corrected code/" wb = xlwt.Workbook() os.chdir(fpath) # 只筛选CSV文件,避免处理其他类型文件 flist = [f for f in os.listdir(fpath) if f.endswith('.csv')] print(flist) for csvfile in flist: fname = csvfile.split(".") print(f"The File Name is {fname[0]}") ws = wb.add_sheet(fname[0]) with open(csvfile, 'rb') as f: reader = csv.reader(f) for r, row in enumerate(reader): for c, col in enumerate(row): # 先转换类型再写入 ws.write(r, c, convert_to_number(col)) wb.save('Percentage_query.xls')
方案二:改用pandas简化操作(更推荐)
如果可以安装第三方库,用pandas来处理会更省心——它会自动识别CSV里的列数据类型,写入Excel时直接保留对应格式,代码也简洁很多:
首先确保你已经安装了pandas和openpyxl:
pip install pandas openpyxl
然后使用下面的代码:
import os import pandas as pd from pathlib import Path fpath = "C:/Project/Phase 3/Corrected code/" os.chdir(fpath) # 创建Excel写入对象,支持xlsx格式 with pd.ExcelWriter('Percentage_query.xlsx') as writer: # 遍历目录下所有CSV文件 for csv_file in Path(fpath).glob('*.csv'): # 读取CSV,pandas自动识别数据类型 df = pd.read_csv(csv_file) # 用文件名作为工作表名(去掉后缀) sheet_name = csv_file.stem # 写入工作表,不保留索引列 df.to_excel(writer, sheet_name=sheet_name, index=False)
这个方案不仅解决了格式问题,还支持更现代的xlsx格式,代码量也少了很多,维护起来更方便。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

