将列表写入csv文件而不在python中循环

时间:2012-12-27 12:40:38

标签: python python-2.7

我有一个列表,列表需要写入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等 或者,任何人都可以提供一些提示/提示,以便我可以创建自己的实现。

3 个答案:

答案 0 :(得分:7)

有一个writerows方法可以在迭代中添加所有行:

csv_file.writerows(the_list)

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

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

答案 1 :(得分:3)

易:

csv_file.writerows(mylist)

(请注意writerows()中的s

答案 2 :(得分:0)

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

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

仍然在列表上进行迭代,但是使用map进行迭代,这是在Python的C库中实现的。