Python用字符串格式化CSV并浮点和写入

时间:2016-07-22 21:06:17

标签: python csv

如何使用混合数据类型将浮点数格式化为2个小数点? 我正在获取一个表并将行写入csv文件。 我的数据是(string,string,float,float,float ...)

    sql = 'select * from testTable'
    c.execute(sql)

    columnNames = list(map(lambda x: x[0], c.description))
    result = c.fetchall()

    with open(outputCSVPath, 'wb') as f:
        writer = csv.writer(f)
        writer.writerow(columnNames)
        writer.writerows(result)

使用上面的代码,我得到6位小数的浮点数。我需要将其格式化为2位小数,但由于列表的前2位是字符串,它会给我一个类型错误。

谢谢。

2 个答案:

答案 0 :(得分:1)

你需要在Python中使用list comprehension和ternary if-else来改变'result'列表。

result = [x if type(x) is str else format(x,'.2f') for x in result]

答案 1 :(得分:1)

您可以迭代结果以仅解析浮点值,然后您可以使用writer.writerows(row)逐行写入。看看here,了解迭代results的不同方法。

另一方面,您可以使用python中的round()函数将浮点数格式化为两个小数点。

一个例子:

>>> # Each of your rows should be something like: 
>>> list = ["string1", "string3", 1.435654, 4.43256]

>>> #Round the floats
>>> parsed_list = [round(x, 2) if i > 1 else x for i, x in enumerate(list)]

>>> print parsed_list
['string1', 'string2', 1.44, 4.43]