Python CSV Writer:如何将带前导零的UPC码以字符串写入?
嘿,我太懂你这个烦恼了!手动给UPC码套双引号,结果导出的CSV里变成了""0853520006427"",这完全是因为Python的csv模块本身就会自动处理引号逻辑——你手动加的引号会被它当成字段内容的一部分,所以它会再套一层引号来转义,就出现了重复的情况。
别慌,给你两个靠谱的解决方案,完美匹配你想要的CSV格式:
方案1:精准控制单个字段加引号(匹配你给出的示例格式)
这个方案会让name字段不带引号,upc字段被双引号包裹,正好符合你要的效果:
import csv # 注意:UPC必须是字符串类型,别转成数字!否则前导零会丢失 products = [ ["Blue Perfume", "0853520006427"], ["Red Cologne", "0223520006427"], ["Beige Tanner", "8292930112345"] ] with open("products.csv", "w", newline="") as csv_file: # 设置QUOTE_NONE告诉writer不要自动加引号,同时指定escapechar处理特殊情况 writer = csv.writer(csv_file, quoting=csv.QUOTE_NONE, escapechar='"') writer.writerow(["name", "upc"]) for name, upc in products: # 手动给UPC套引号,writer不会再额外添加 writer.writerow([name, f'"{upc}"'])
导出的CSV就是你想要的样子:
name,upc Blue Perfume,"0853520006427" Red Cologne,"0223520006427" Beige Tanner,"8292930112345"
方案2:让所有非数字字段自动加引号
如果不在意name字段也被引号包裹,这个方法更简单,适合批量处理:
import csv products = [ ["Blue Perfume", "0853520006427"], ["Red Cologne", "0223520006427"], ["Beige Tanner", "8292930112345"] ] with open("products.csv", "w", newline="") as csv_file: # QUOTE_NONNUMERIC会给所有非数字类型的字段自动加引号 writer = csv.writer(csv_file, quoting=csv.QUOTE_NONNUMERIC) writer.writerow(["name", "upc"]) writer.writerows(products)
导出的CSV会是这样:
"name","upc" "Blue Perfume","0853520006427" "Red Cologne","0223520006427" "Beige Tanner","8292930112345"
关键提醒!
无论用哪个方案,一定要确保UPC码是字符串类型,如果从数据库、API或者其他地方读取的UPC是数字,记得用str(upc)转成字符串,不然前导零会直接丢失,这才是最核心的问题哦。
内容的提问来源于stack exchange,提问作者AlfredoGG
相关产品推荐
相关产品推荐

