我正在尝试将数字字符串写入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文件这一事实,它试图用文件内容做自己的事情。
答案 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”)对其进行格式化,其中#的零是您的值的长度。