编写CSV时保留小数位

时间:2020-02-17 08:05:11

标签: python csv

似乎在使用编写器写入CSV文件时,十进制的0会自动被忽略。例如

out.update({movieID:"%.1f" % (round(sum(rating)/float(len(rating)),1))})
for key in sorted(out.keys()):
        writer1.writerow({'movieID': int(key), 'avg_rating': out[key]})

我在编写CSV时指定了一个十进制小数,我的预期输出

3.0
3.3

实际输出为CSV

3
3.3

是否始终保留此值?我还尝试了quoting =非数字

1 个答案:

答案 0 :(得分:0)

尝试一下:

import csv

with open('test.csv', mode='w') as csv_file:
    fieldnames = ['#', 'Salary']
    writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerow({'#': '32', 'Salary': '100.40'})
    writer.writerow({'#': '33', 'Salary': '100.4400'})
    writer.writerow({'#': '34', 'Salary': '101.40'})
    writer.writerow({'#': '35', 'Salary': '105.430'})

使用记事本打开文件时,收到以下消息:

#,Salary    
32,100.40    
33,100.4400    
34,101.40    
35,105.430

如果使用Excel打开,则可能的解决方案是将带有数字的列显式导入为文本。

  • 数据>获取外部数据>来自文本

enter image description here

  • 单击“下一步”,并确保已选中带有数字的列。单选按钮应为“文本”:

enter image description here

  • 最后,将csv表作为文本导入到Excel:

enter image description here

请注意,Excel中的文本会自动左对齐,而数字则右对齐。公式仍然可以在文本上使用,因为Excel足够“明智”,可以将它们正确解析为数字。