为什么csv.writer会删除前导零?

时间:2017-05-16 20:53:02

标签: python csv

我正在尝试将数字字符串写入CSV文件。一些字符串具有前导零,当字符串写入文件时,前导零消失。为什么会发生这种情况,我该如何预防呢?

示例代码:

import csv

with open("output.csv", "wb") as f:
    writer = csv.writer(f)
    row = ("01", "02", "03")
    writer.writerow(row)

当我打开output.csv时,已写入的值显示为1,2,3,而不是01,02,03。 我在Windows 10 Pro上使用Python 2.7.9,如果这与问题相关。

编辑:问题似乎来自于我用Excel打开CSV文件这一事实,它试图用文件内容做自己的事情。

2 个答案:

答案 0 :(得分:6)

Microsoft Excel(至少2013年),如果它们完全是数字01,则会将csv文件中的值转换为数字,为了解决这个问题,您可以强制Excel将该值解析为字符串。

您可以使用以下内容:

row = tuple("=\"" + r + "\"" for r in row)

预先添加="并将"附加到每个元素,有效地将其转换为Excel字符串。

>>> row = ("01", "02", "03")
>>> row = tuple("=\"" + r + "\"" for r in row)
>>> row
('="01"', '="02"', '="03"')

这将在csv中显示为="01",="02",="03",并由Excel正确解析。

当然,只有在您的值中没有出现双引号时,这才有效。

答案 1 :(得分:0)

由于这是Excel解析引起的问题。打开文件后,最好仅在Excel中设置文本格式。

假设它是固定长度的值,则可以使用= Text(cell,“ 000000”)对其进行格式化,其中#的零是您的值的长度。