2012-07-09 55 views
2

使用CSV作家时,我有一个浮动的变量,OBJ [“时间”],它代表了UNIX时间,以前我写的结果到一个文本文件中设定的精度,所以我可以使用如何在python

fd_out.write("%.6f\n" %(obj["time"])) 

强制结果有6位小数。但现在我想打印结果为CSV文件,而不是,所以我用:

writer.writerow((obj["time"])) 

结果只有2位小数在默认情况下,我怎么会改变呢?

+0

这是较早的回答: http://stackoverflow.com/questions/2982642/specifying-formatting-for-csv-writer-in-python – 2012-07-09 16:43:30

+0

不应该是'writer.writerow((obj ['time'],))'#ie,一个元素元组? – 2012-07-09 16:44:50

+1

你在哪里看到它只有两位小数?当我使用'csv.writer'时,我得到了输入中的所有数字。 – 2012-07-09 18:24:41

回答

3

使用的中间格式应该解决您的问题,像这样的例子:

writer.writerow(("%.6f" % obj["time"],)) 
1

当你直接写入文件,你做的格式化操作的浮点变量转换为字符串与所需号数字。您可以为CSV编写器做同样的事情。

writer.writerow("%.6f" %(obj["time"])) 

如你需要离开了换行符评论中指出,由于CSV作家将添加为您服务。

+0

这也插入一个换行 – 2012-07-09 18:09:40

+0

@OttoAllmendinger,谢谢。很容易错过简单明显的事情。 – 2012-07-09 18:13:49

1

从早先的答案在Specifying formatting for csv.writer in Python

class TypedWriter: 
    """ 
    A CSV writer which will write rows to CSV file "f", 
    which uses "fieldformats" to format fields. 
    """ 

    def __init__(self, f, fieldnames, fieldformats, **kwds): 
     self.writer = csv.DictWriter(f, fieldnames, **kwds) 
     self.formats = fieldformats 

    def writerow(self, row): 
     self.writer.writerow(dict((k, self.formats[k] % v) 
            for k, v in row.iteritems())) 

    def writerows(self, rows): 
     for row in rows: 
      self.writerow(row)