从python到cs的格式设置

2024-03-29 12:23:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将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文件中获得预期的输出?你知道吗


Tags: 文件csvcsvfilekeynumberdate字典with
2条回答

试试这个:

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)

问题出在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

相关问题 更多 >