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

为何列表中的字符串元素存入CSV文件后会被转换为整数?

为什么CSV里的前导0会丢失?

这个问题我之前踩过坑!其实不是你的Python代码把'0132176084'转成整数了——你用记事本打开生成的numberofbugs.csv文件看看,前导0肯定还好好的在里面。真正的问题出在你用来查看CSV的工具(比如Excel、WPS表格这类电子软件):它们在读取CSV时会自动做类型识别,把看起来像数字的字符串默认解析成整数格式,而整数是不需要前导0的,所以就被自动去掉了。

解决办法

针对这个问题,有两种简单的处理方式,能让阅读器把这类带前导0的字段识别为文本:

1. 给字段添加单引号前缀

在写入CSV时,给需要保留前导0的字符串前面加一个英文单引号,电子表格工具看到这个前缀就会把单元格当作文本处理,而且会自动隐藏单引号,只显示带前导0的内容。修改你的循环代码即可:

import csv

mylist = [['HBASE-5727', 2, '66772ce043', '1044d5e353'], ['HBASE-5286', 2, '180b41f518', '0132176084'], ['HBASE-532', 3, 'ef5bb6f316', 'fb2db8cdaa'] ]

with open("numberofbugs.csv",'w') as csvfile:
    header = ['bug_id', 'number_of_bugs', 'first_commitID', 'last_commitID']
    writers = csv.writer(csvfile)
    writers.writerow(header)
    for item in mylist:
        # 给第四个字段(last_commitID)添加单引号前缀
        item[3] = f"'{item[3]}"
        writers.writerow(item)

2. 用csv模块的quoting参数强制包裹字段

通过设置quoting=csv.QUOTE_ALL,让每个字段都被双引号包裹,电子表格工具会把带双引号的全数字字符串识别为文本,保留前导0。这种方法不需要修改字段内容,只需要调整writer的初始化:

import csv

mylist = [['HBASE-5727', 2, '66772ce043', '1044d5e353'], ['HBASE-5286', 2, '180b41f518', '0132176084'], ['HBASE-532', 3, 'ef5bb6f316', 'fb2db8cdaa'] ]

with open("numberofbugs.csv",'w') as csvfile:
    header = ['bug_id', 'number_of_bugs', 'first_commitID', 'last_commitID']
    # 启用全字段引号包裹
    writers = csv.writer(csvfile, quoting=csv.QUOTE_ALL)
    writers.writerow(header)
    for item in mylist:
        writers.writerow(item)

两种方法都能解决问题,你可以根据自己的需求选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:08:38