我正在尝试将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文件中获得预期的输出?
答案 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)