从python格式化为csv

时间:2019-01-10 14:59:39

标签: python excel python-3.x export-to-csv

我正在尝试将python中的字典中的键和值写入csv文件。我正在获取写输出,但我想对其进行格式化,以使其不包含任何制表符或空格。当我尝试时:

with open(datafile, 'w', newline='', encoding='utf8') as csvfile:
    datawriter = csv.writer(csvfile, delimiter='\t')
    dic = {'2017-03-07': '36939142', '2014-02-19': '13193909'}
    for key in dic.keys():
        date = key
        order_number = dic[key]
        row = [date, order_number]
        datawriter.writerow(','.join(row))

我正在寻找csv文件中的输出。 2017-03-07,36939142。但是在输出中改为:2 0 1 7-0 3-0 7和订单号3 6 9 3 9 1 4 2。

每个字符之间都有空格/制表符。这使得不可能使用许多excel函数。

如何在csv文件中获得预期的输出?

2 个答案:

答案 0 :(得分:2)

您的问题出在delimiter和调用writerow()的参数中。 csv模块已经为您处理了列的定界,因此您无需使用','.join(row)来格式化行。代码中发生的事情是,您向函数'2017-03-07,36939142'中传递了一个字符串writerow(),该字符串需要一个列表(如@JordanSinger所述)。因此,它将字符串带入列表,并变成['2', '0', '1', '7', '-', etc]。然后,定界符是'\t',因此csv编写器采用了从','.join(row)创建的字符串的每个字符,并在每个字符之间放置了一个制表符(就像每个字符是自己的列一样,由制表符分隔)。因此,您想更改定界符以及将函数调用更改为writerow以传递列表,而不是字符串。

此外,您可以通过将字典解压缩为(key, value)对的元组而不是遍历键来减少代码。

dic = {'2017-03-07': '36939142', '2014-02-19': '13193909'}

with open(datafile, 'w', newline='', encoding='utf8') as csvfile:
    datawriter = csv.writer(csvfile, delimiter=',')
    for date,order_number in dic.items():
        datawriter.writerow([date,order_number])

输出:

2017-03-07,36939142
2014-02-19,13193909

答案 1 :(得分:0)

尝试一下:

with open(datafile, 'w', newline='', encoding='utf8') as csvfile:
    datawriter = csv.writer(csvfile, delimiter=',')
    dic = {'2017-03-07': '36939142', '2014-02-19': '13193909'}

    for key, value in dic.items():
        row = [key, value]
        datawriter.writerow(row)