You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:03:23