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

Python如何将CSV转换为XLSX?转换后数值列存为文本致SQL转换失败怎么办

修复CSV转XLSX数值列存储为文本的问题

你代码中开启的strings_to_numbers参数仅支持转换无额外字符的纯数字字符串,若CSV中数值列包含空格、千位分隔符、货币符号等内容,就会仍然被识别为文本写入,导致后续SQL类型转换失败。另外你定义的货币格式没有实际绑定到单元格,也未做异常兼容。

修复后完整代码如下:

import csv, os
from glob import glob
from xlsxwriter.workbook import Workbook
import openpyxl

def try_convert_to_number(data):
    # 可根据你的CSV实际格式调整清理规则
    data = data.strip()
    # 移除常见的数值额外符号
    data = data.replace('$', '').replace(',', '')
    try:
        # 优先匹配整数,再匹配浮点数
        if '.' in data:
            return float(data)
        else:
            return int(data)
    except ValueError:
        # 转换失败返回原始字符串,兼容表头、文本类字段
        return data

for csvfile in glob('FILE.CSV'):
    workbook = Workbook('FILE.xlsx', {'strings_to_numbers': True, 'constant_memory': True})
    worksheet = workbook.add_worksheet()
    # 格式统一定义,不要放在循环内重复创建
    currency_format = workbook.add_format({'num_format': '$#,##0.00'})

    with open(csvfile, 'r', encoding='utf-8') as f:
        r = csv.reader(f, delimiter=';')
        for row_index, row in enumerate(r):
            for col_index, data in enumerate(row):
                converted_data = try_convert_to_number(data)
                # 数值类内容绑定货币格式写入,文本类内容直接写入
                if isinstance(converted_data, (int, float)):
                    worksheet.write(row_index, col_index, converted_data, currency_format)
                else:
                    worksheet.write(row_index, col_index, converted_data)

    workbook.close()

    # 统一文件名大小写,避免跨系统运行报错
    ss = openpyxl.load_workbook("FILE.xlsx")
    ss_sheet = ss['Sheet1']
    ss_sheet.title = 'plan1'
    ss.save("FILE.xlsx")

print("-------------------------------------------")
print("   .CSV to .XLSX Conversion Successful")
print("-------------------------------------------")

主要改动说明:

  • 新增自定义数值转换函数,自动清理CSV数值中的额外格式字符,兼容非纯数字的数值内容
  • 格式定义移出循环,避免重复创建无效对象,同时将货币格式正确绑定到数值单元格
  • 统一文件名大小写,解决Windows/Linux跨系统运行时找不到文件的隐性问题
  • 新增文件编码指定,避免CSV包含中文等特殊字符时出现乱码

如果你的CSV数值字段包含其他特殊格式字符,直接在try_convert_to_number函数中补充对应的清理规则即可。

内容的提问来源于stack exchange,提问作者wisley c45

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:54:03