使用Python列表中的值创建.csv文件

For*_*lan 155 python csv xlrd

我正在尝试使用Python列表中的值创建.csv文件.当我打印列表中的值时,它们都是unicode(?),即它们看起来像这样

[u'value 1', u'value 2', ...]
Run Code Online (Sandbox Code Playgroud)

如果我遍历列表中的值,即for v in mylist: print v它们看起来是纯文本.

我可以,在每个之间放一个print ','.join(mylist)

我可以输出到文件,即

myfile = open(...)
print >>myfile, ','.join(mylist)
Run Code Online (Sandbox Code Playgroud)

但是我想输出到CSV并且在列表中的值周围有分隔符,例如

"value 1", "value 2", ... 
Run Code Online (Sandbox Code Playgroud)

我找不到一种简单的方法来在格式中包含分隔符,例如我已经尝试了join语句.我怎样才能做到这一点?

Ale*_*lli 220

import csv

with open(..., 'wb') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    wr.writerow(mylist)
Run Code Online (Sandbox Code Playgroud)

编辑:这只适用于python 2.x.

使其与python 3.x一起使用替换wbw(请参阅此SO答案)

with open(..., 'w', newline='') as myfile:
     wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
     wr.writerow(mylist)
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用wr.writerows(列表) (14认同)
  • 请注意2.x中的`csv`模块无法正确处理unicodes; 有关如何处理此问题的示例,请参阅模块文档.http://docs.python.org/library/csv.html (11认同)
  • 哦,以"w"模式打开文件解决了这个问题. (7认同)
  • `open(filename,'w',newline ='')`为我做了诀窍. (7认同)
  • 如果每个元素都是一个列表,Writerows似乎将列表中的每个元素分解为列.这对于输出表非常方便. (4认同)
  • 这不适用于python 3.4.我得到`TypeError:'str'不支持缓冲接口`. (4认同)

Cri*_*cia 96

这是Alex Martelli的安全版本:

import csv

with open('filename', 'wb') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
    wr.writerow(mylist)
Run Code Online (Sandbox Code Playgroud)

  • 使用`with`加1,确保文件完成后关闭 (3认同)

Qy *_*Zuo 29

对于另一种方法,您可以在pandas中使用DataFrame:它可以轻松地将数据转储到csv,就像下面的代码一样:

import pandas
df = pandas.DataFrame(data={"col1": list_1, "col2": list_2})
df.to_csv("./file.csv", sep=',',index=False)
Run Code Online (Sandbox Code Playgroud)

  • 为了使这个工作,列表需要具有相同的长度,否则你将得到一个ValueError(pandas v 0.22.0) (4认同)
  • 感谢您提供此代码片段,它可能会提供一些即时帮助。一个正确的解释[将大大提高](//meta.stackexchange.com/q/114762) 通过展示*为什么*这是一个很好的解决问题的方法,它的教育价值,并且会使它对未来有类似情况的读者更有用,但不相同,问题。请[编辑]您的答案以添加解释,并说明适用的限制和假设。 (2认同)

tok*_*fsj 28

我发现用的是最好的选择savetxtnumpy模块:

import numpy as np
np.savetxt("file_name.csv", data1, delimiter=",", fmt='%s', header=header)
Run Code Online (Sandbox Code Playgroud)

如果您有多个需要堆叠的列表

np.savetxt("file_name.csv", np.column_stack((data1, data2)), delimiter=",", fmt='%s', header=header)
Run Code Online (Sandbox Code Playgroud)

  • 这适用于数字工作,但在列表中使用字符串时它不起作用. (5认同)
  • 这在包含字符串和数字(​​浮点型和整数)的列表中对我有用。 (2认同)

vy3*_*y32 12

使用python的csv模块读取和写入逗号或制表符分隔的文件.csv模块是首选,因为它可以很好地控制报价.

例如,以下是您的工作示例:

import csv
data = ["value %d" % i for i in range(1,4)]

out = csv.writer(open("myfile.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL)
out.writerow(data)
Run Code Online (Sandbox Code Playgroud)

生产:

"value 1","value 2","value 3"
Run Code Online (Sandbox Code Playgroud)

  • 为我产生一个空文件 (3认同)

Rob*_*tie 7

在这种情况下,您可以使用string.join方法.

为清晰起见,分成几行 - 这是一个互动会话

>>> a = ['a','b','c']
>>> first = '", "'.join(a)
>>> second = '"%s"' % first
>>> print second
"a", "b", "c"
Run Code Online (Sandbox Code Playgroud)

或者作为单行

>>> print ('"%s"') % '", "'.join(a)
"a", "b", "c"
Run Code Online (Sandbox Code Playgroud)

但是,您可能遇到的问题是您的字符串已嵌入引号.如果是这种情况,您需要决定如何逃避它们.

The CSV module can take care of all of this for you, allowing you to choose between various quoting options (all fields, only fields with quotes and seperators, only non numeric fields, etc) and how to esacpe control charecters (double quotes, or escaped strings). If your values are simple, string.join will probably be OK but if you're having to manage lots of edge cases, use the module available.


小智 6

这个解决方案听起来很疯狂,但像蜂蜜一样顺利

import csv

with open('filename', 'wb') as myfile:
    wr = csv.writer(myfile, quoting=csv.QUOTE_ALL,delimiter='\n')
    wr.writerow(mylist)
Run Code Online (Sandbox Code Playgroud)

该文件由 csvwriter 写入,因此维护 csv 属性,即逗号分隔。分隔符通过每次将列表项移动到下一行来帮助主要部分。


rsc*_*c05 5

Jupyter 笔记本

假设您的列表名称是 A

然后您可以编写以下代码,并将其作为 csv 文件(仅限列!)

R="\n".join(A)
f = open('Columns.csv','w')
f.write(R)
f.close()
Run Code Online (Sandbox Code Playgroud)


Har*_*vey 5

这是Python 3.x 的工作复制粘贴示例,其中包含定义您自己的分隔符和引号字符的选项。

import csv

mylist = ['value 1', 'value 2', 'value 3']

with open('employee_file.csv', mode='w') as employee_file:
    employee_writer = csv.writer(employee_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_ALL)
    employee_writer.writerow(mylist)
Run Code Online (Sandbox Code Playgroud)

这将生成employee_file.csv如下所示:

"value 1","value 2","value 3"
Run Code Online (Sandbox Code Playgroud)

笔记:

如果 quoting 设置为csv.QUOTE_MINIMAL,则.writerow()仅当字段包含分隔符或quotechar 时才会引用字段。这是默认情况。

如果引用设置为csv.QUOTE_ALL.writerow()则将引用所有字段。

如果引用设置为csv.QUOTE_NONNUMERIC.writerow()则将引用包含文本数据的所有字段并将所有数字字段转换为浮点数据类型。

如果 quoting 设置为csv.QUOTE_NONE.writerow()则将转义分隔符而不是引用它们。在这种情况下,您还必须为 escapechar 可选参数提供一个值。