【问题标题】:Formatting from python to csv从 python 格式化为 csv
【发布时间】:2019-01-10 14:59:39
【问题描述】:

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

【问题讨论】:

  • writerow 函数将列表作为参数,而不是字符串。只需更改为datawriter.writerow(row)
  • @JordanSinger 是正确的,但仅更改该部分会导致列用制表符而不是逗号分隔。 delimter 必须更改为 ',' 以及更改 writerow 的函数调用以传递列表。

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


【解决方案1】:

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

【讨论】:

    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2016-12-06
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2012-11-02
      • 2013-02-10
      • 2019-06-02
      • 2015-12-07
      • 1970-01-01
      相关资源
      最近更新 更多