【问题标题】:Convert dictionary of lists to a CSV file using Python使用 Python 将列表字典转换为 CSV 文件
【发布时间】:2018-01-14 00:51:22
【问题描述】:

我试图找到我想要的相同问题,但我没有弄清楚。我尝试学习列表的python字典并转换为CSV文件。案例是这样的。我试图为键创建一个标题,我试图创建一个数据作为值。

header_column = ["id", "data"]
text = ["1, first", "2, second", "3, thrid"]
for k in header_column:
    a = {k:text}
    insert = open('sample.csv', 'wb')
    insert.write(str(a))

在 csv 上,我想要:

id data
1  First
2  Second
3  Thrid

【问题讨论】:

    标签: python list csv dictionary


    【解决方案1】:

    您为什么要使用字典?您可以使用csv 模块并直接编写这些列表。

    import csv
    
    header_column = ["id", "data"]
    text = ["1, first", "2, second", "3, third"]
    
    with open('sample.tsv', 'wb') as f:
        writer = csv.writer(f, delimiter='\t')
        writer.writerow(header_column)
        for l in text:
            writer.writerow(l.split(', '))
    

    这按预期工作,给予

    id  data
    1   first
    2   second
    3   third
    

    请注意 excel 以了解您的代码是制表符分隔的,您需要将其保存为 .tsv 文件。

    【讨论】:

    • 你怎么总是能这么快得到答案?!就在我开始打字的时候,你的就会出现:p
    • @JoeIddon 哈哈抱歉。我猜我擅长触摸打字:p
    • 我尝试了你的代码,但是当我使用 .csv 文件时,结果不是我想要的,但是当我用 .tsv 文件更改时,它可以工作/但是,为什么 .tsv 文件?它不适用于 .csv 文件??
    • @Scarlettstone 因为! Excel 会看到文件扩展名并采用分隔符。这就是为什么。无论如何,如果有帮助,请随时标记接受。
    • 谢谢,现在它对我有用。我试图改进以仍然使用 csv 并且它正在工作。非常感谢。
    【解决方案2】:

    你只导入 numpy pip -install numpy

    import numpy
    a = numpy.asarray([ [1,first], [2,second], [3,third] ])
    numpy.savetxt("sample.csv", a, delimiter=",")
    

    【讨论】:

      【解决方案3】:

      遍历您的列表并逐行编写每一行会更有效。这可以防止创建字典,从而使列表大小的内存需求翻倍。

      我选择不使用csv 模块并直接写入文件,因为您写入文件的值已经被解析为字符串(除了需要作为字符串连接的标题)。

      header_column = ...
      text = ...
      with open('sample.csv', 'wb') as f:
          f.write(", ".join(header_column) + '\n')
          for row in text:
              f.write(row + '\n')
      

      【讨论】:

      • 嘿,干得不错。但是,头部数据没有显示,而且循环很多,几乎每个数据都有双数据。
      • 适用于我的示例数据。
      • 天哪,对不起,真正的文本变量是 text = ["1, 'first' ", "2, 'second' ", "3, 'third' "]。这个符号(')是否有效果??
      • 仍然为我工作,例如第 1 行:1, 'first'。您的数据是否有可能缺少一个单引号,这会导致所有内容丢失?例如。 ["1, 'first", "2, 'second'"]
      【解决方案4】:

      我是一个简单的灵魂。不需要使用先进的技术。

      >>> header_column = ["id", "data"]
      >>> text = ["1, first", "2, second", "3, thrid"]
      >>> with open('sample.csv', 'w') as sample:
      ...     n = sample.write(' '.join(header_column)+'\n')
      ...     for item in text:
      ...         n = sample.write(item.replace(',', '')+'\n')
      

      编辑:根据评论稍微修改了代码。请注意第二个 write 语句中的附加 .replace("'", '')

      >>> with open('sample.csv', 'w') as sample:
      ...     n = sample.write(' '.join(header_column)+'\n')
      ...     for item in text:
      ...         n = sample.write(item.replace(',', '').replace("'", '')+'\n')
      

      【讨论】:

      • 我正在尝试您的代码,但结果不像我想要的那样,因为结果是文本变量,它应该分成两列,id 和 data。但所有的文本变量只显示在 1 列中。
      • 使用问题中提供的数据为我工作。
      • 天哪,对不起,真正的文本变量是 text = ["1, 'first' ", "2, 'second' ", "3, 'third' "]。这个符号(')是否有效果??