如何在Python中将列表转换为CSV

24

我有一个列表: ['1', '2', '3'],想要将它转换为1,2,3,即没有括号或引号。


你只需要一个以逗号分隔的文本列表还是一个CSV文件? - martineau
6个回答

21
",".join(lst)

会做,但那并不是真正的csv(需要转义等)。


14

使用Pandas,您可以将几乎任何列表转换为CSV文件,如下所示:

import pandas as pd    

list1 = [1,2,3,4,5]
df = pd.DataFrame(list1)

根据您希望使用这个csv的方式,您可以将它保存在一个变量中:

csv_data = df.to_csv(index=False)

或像这样将其保存在您的文件系统中:

df.to_csv('filename.csv', index=False)

在你的csv中,index=False会移除不必要的索引/编号。


13
如果您想生成一个规范的CSV文件,请使用csv模块。

文档中的示例:

>>> import csv
>>> spamWriter = csv.writer(open('eggs.csv', 'wb'), delimiter=' ',
...                         quotechar='|', quoting=csv.QUOTE_MINIMAL)
>>> spamWriter.writerow(['Spam'] * 5 + ['Baked Beans'])
>>> spamWriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

当然可以。已经添加到答案中了。只需使用foo.writerow(list),其中foo是您的csv.writer对象即可。 - asthasr
1
在我看来,“规范”的CSV应该使用逗号作为分隔符,而不是空格,并且可能会使用双引号作为引用字符,而不是“|”。 - martineau
正确。在这种情况下,您可以省略这两个选项。 - asthasr

1
我认为你需要将代码中的文件打开部分拆分出来,以便稍后单独关闭。在这种情况下,你正在尝试“关闭”写入器对象。虽然更好的方法是使用“with”,但这个例子更类似于你的方式:
csvfile = open('test.csv', 'wb')
csvwriter = csv.writer(csvfile)
for item in pct:
    csvwriter.writerow(item)
csvfile.close()

1
import csv

def writeCsvFile(fname, data, *args, **kwargs):
    """
    @param fname: string, name of file to write
    @param data: list of list of items

    Write data to file
    """
    mycsv = csv.writer(open(fname, 'wb'), *args, **kwargs)
    for row in data:
        mycsv.writerow(row)

mydat = (
    ['Name','Age','Grade'],
    ['Teri', 14, 7],
    ['John', 8, 2]
)

writeCsvFile(r'c:\test.csv', mydat)

为什么在文件 open 中要使用 'b'(二进制模式)模式? - Intrastellar Explorer

0
Carl,每当你将数据写入文件时,Python实际上会缓冲数据,然后使用文件进行I/O操作(将数据写入文件)。这个操作被称为“刷新”(缓冲区)。你必须确保关闭打开的文件,否则缓冲区不会被刷新,因此文件中将没有任何内容被写入。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接