我正在尝试使用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一起使用替换wb为w(请参阅此SO答案)
with open(..., 'w', newline='') as myfile:
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)
wr.writerow(mylist)
Run Code Online (Sandbox Code Playgroud)
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)
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)
tok*_*fsj 28
我发现用的是最好的选择savetxt从numpy模块:
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)
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)
在这种情况下,您可以使用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 属性,即逗号分隔。分隔符通过每次将列表项移动到下一行来帮助主要部分。
假设您的列表名称是 A
然后您可以编写以下代码,并将其作为 csv 文件(仅限列!)
R="\n".join(A)
f = open('Columns.csv','w')
f.write(R)
f.close()
Run Code Online (Sandbox Code Playgroud)
这是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 可选参数提供一个值。
| 归档时间: |
|
| 查看次数: |
523526 次 |
| 最近记录: |