繁体   English   中英

Python CSV编写器:如何编写以前导零作为字符串的upc代码?

[英]Python CSV writer: How to write upc code with leading zero as string?

我正在将Python与csv writer一起使用,以在几列中导出包含UPC代码(有时包含前导零)的csv。

导出的工作表应如下所示:

name, upc    
Blue Perfume, "0853520006427"   
Red Cologne, "0223520006427"   
Beige Tanner, "8292930112345"  
...

为了达到这个目的,我尝试添加双引号,如下所示:

productSKU = '\"' + productSKU + '\"'

但这最终将双双引号输出到csv文件,如下所示:

""0853520006427""

我已阅读在线建议,尝试在工作表的开头添加=,以便Excel将单元格解析为字符串,但这是不希望有的行为,因为它将条目保留在生成的csv文件中,如下所示:

="0853520006427"

与此相反:

"0853520006427"

csv writer实现最终结果的正确方法是什么?

编辑

这是我编写的用于测试的快速python脚本:

import csv

filename = 'output.csv'

with open(filename, 'w', newline='', encoding='utf-8') as csvfile:
    writer = csv.writer(csvfile)

    rowData = ['Blue Shampoo', '0853520006427']
    writer.writerow(rowData)

    rowData = ['Blue Shampoo', '\"0853520006427\"']
    writer.writerow(rowData)

    rowData = ['Blue Shampoo', '=\"0853520006427\"']
    writer.writerow(rowData)

    rowData = ['Blue Shampoo', '\'0853520006427']
    writer.writerow(rowData)

注意结果数据:

Blue Shampoo,0853520006427
Blue Shampoo,"""0853520006427"""
Blue Shampoo,"=""0853520006427"""
Blue Shampoo,'0853520006427

我认为您在写入csv时必须对所有数据明确提供报价,并选择QUOTE_ALL作为报价策略:

In [23]: import csv
    ...: 
    ...: filename = 'output.csv'
    ...: 
    ...: with open(filename, 'w', newline='', encoding='utf-8') as csvfile:
    ...:     writer = csv.writer(csvfile, delimiter=",", quotechar='"', quoting=csv.QUOTE_ALL)
    ...:     rowData = ['Blue Shampoo', '0853520006427']
    ...:     writer.writerow(rowData)
    ...: 

给出输出:

“蓝色洗发水”,“ 0853520006427”

但是,这也会将您的第一个字段放在引号内(所有字段之间都应保持一致,所以我想应该没问题)。

由于csv模块仅支持4种引号QUOTE_ALL, QUOTE_MINIMAL, QUOTE_NONE, QUOTE_NONNUMERIC ),因此,如果使用csv模块,则这是唯一的选择。 当然,您可以以与csv兼容的方式写入不带csv模块的文件。

我最后做了一些测试,似乎将UPC代码用双引号引起来并不能防止EXCEL将字段读取为数字。 大熊猫也会发生同样的事情。 您当然可以做这样的事情: rowData = ['Blue Shampoo', "'0853520006427'"] ,它将输出"Blue Shampoo,'0853520006427'将以字符串形式读取UPC代码,但是它将具有它周围的单引号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM