【问题标题】:How to write data from two lists into columns in a csv?如何将两个列表中的数据写入 csv 的列中?
【发布时间】:2013-10-18 14:48:49
【问题描述】:

我想将必须创建直方图的数据写入 csv 文件。我有我的“垃圾箱”列表和“频率”列表。有人可以帮我将它们写入各自列中的 csv 吗?

即第一列中的 bin 和第二列中的频率

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 分类和频率列表(数字、字符串、列表、字典、类实例等)中有哪些类型的数据?您在问题中提供的详细信息越多,您就会得到更好的答案。
  • 更好的是,不要只描述数据,给我们一些示例数据,以及您想要的确切输出格式。

标签: python csv file-io


【解决方案1】:

原始 Python 2 答案

此示例使用izip(而不是zip)来避免创建新列表并将其保存在内存中。它还使用Python's built in csv module,确保正确转义。作为一个额外的好处,它还避免使用任何循环,因此代码简短而简洁。

import csv
from itertools import izip

with open('some.csv', 'wb') as f:
    writer = csv.writer(f)
    writer.writerows(izip(bins, frequencies))

适用于 Python 3 的代码

在 Python 3 中,您不再需要 izip — 内置的 zip 现在可以执行 izip 过去所做的工作。您也不需要以二进制模式打开文件:

import csv

with open('some.csv', 'w') as f:
    writer = csv.writer(f)
    writer.writerows(zip(bins, frequencies))

【讨论】:

  • 谢谢,效果很好。将来我会尝试在问题中添加更多细节,事后我可以看到它是多么模糊。
  • 另外,在 Python 3 中,您不需要将其作为二进制文件打开:使用 'w' 而不是 'wb'
  • 在 python 3 中你不需要导入 zip 你可以直接使用它。 (stackoverflow.com/questions/32659552/…)
  • @Suleka_28 没错。我的回答中提到了这一点,但我发现对此仍有很多困惑,所以我添加了一个明确的 Python 3 示例。
  • 使用 open(...,newline='') 防止出现空白行stackoverflow.com/a/21804265/1114105
【解决方案2】:

嗯,我错过了什么吗?这听起来很简单:

bins = [ 1,2,3,4,5 ]
freq = [ 9,8,7,6,5 ]

f = open("test.csv", "w")

for i in xrange(len(bins)):
    f.write("{} {}\n".format(bins[i], freq[i]))

f.close()

【讨论】:

    【解决方案3】:

    你应该使用 zip() http://docs.python.org/2/library/functions.html#zip

    类似:

    f=open(my_filename,'w')
    for i,j in zip(bins,frequencies):
        f.write(str(i)+","+str(j))
    f.close()
    

    【讨论】:

    • 由于他没有告诉我们垃圾箱标签是什么样子的,我肯定想在这里使用csv。否则,像 "a=0-10,b=0-10" 这样的 bin 最终会变成两列。
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2018-06-01
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多