4

我有一个需要写入 csv 文件的列表列表。

mylist = [['Siddharth','Bangalore','blah@gmail.com'],  
        ['Rahul','Bangalore','blah2@gmail.com'],.....and so on]  

这个列表通常有 20,000 到 40,000 长。
所以,现在,将它们写入 csv 文件的唯一方法是遍历列表并写入:

fileObj = open("/home/siddharth/sample.csv", "wb")
csv_file = csv.writer(fileObj)  
for item in mylist:  
    csv_file.writerow(item)  

所以,我只是想知道,有没有办法将这样的列表列表写入 csv,而无需遍历列表中的每个项目,例如。喜欢使用StringIO等。
或者,任何人都可以提供一些提示/提示,以便我可以创建自己的实现。

4

3 回答 3

7

有一种writerows方法可以将所有行添加到可迭代对象中:

csv_file.writerows(the_list)

无论你做什么,总会有一个循环在某处(无论是在你的代码中还是在 Python 库实现中)。没有办法绕过它,因为您需要查看列表中的每个项目,以便将它们写入文件。

如果您担心将每一行分别写入文件的性能:Python 默认使用缓冲 I/O,因此即使您在循环中逐个写入列表项,它们也不一定会写成这样到文件中。每当缓冲区填满时,它们将被分块写入,这将具有更好的性能。如果需要,您可以使用 的buffering参数显式控制缓冲区大小open

于 2012-12-27T12:42:53.233 回答
3

简单的:

csv_file.writerows(mylist)

(注意s中的writerows()

于 2012-12-27T12:42:59.877 回答
0

这些都是字符串元组?只有40,000个?你试过这个吗?

with open('outputfile.csv','w') as csv_file:
    csv_file.write('\n'.join(map(','.join, my_list)+'\n'))

仍在迭代列表,但使用mapPython 的 C 库中实现的 .

于 2012-12-27T14:06:44.670 回答