O módulo CSV embutido do Python pode lidar com isso facilmente:
import csv
with open("output.csv","wb")as f:
writer = csv.writer(f)
writer.writerows(a)
Isso pressupõe que sua lista está definida como a, como na sua pergunta. Você pode ajustar o formato exato do CSV de saída através dos vários parâmetros opcionais, csv.writer()conforme documentado na página de referência da biblioteca vinculada acima.
Atualização para Python 3
import csv
with open("out.csv","w", newline="")as f:
writer = csv.writer(f)
writer.writerows(a)
Em python3 eu tive que usar open ('output.csv', 'w', newline = "")
Tim Mottram
1
WOW que o erro python 3 é muito inútil. Obrigado @vladV (é necessário um objeto semelhante a bytes, não 'str'). Isso faz sentido em retrospectiva, mas não fornece informações sobre onde procurar.
Rambatino 25/05
1
@tlalco que provavelmente significa que você está usando Python 2; nesse caso, você deve usar o primeiro bloco de código em vez do segundo. (Isso também significa que você deve considerar mudar para o Python 3.)
Amber
35
Você poderia usar pandas:
In[1]:import pandas as pd
In[2]: a =[[1.2,'abc',3],[1.2,'werew',4],[1.4,'qew',2]]In[3]: my_df = pd.DataFrame(a)In[4]: my_df.to_csv('my_csv.csv', index=False, header=False)
Isso receberá meu +1 se você puder explicar sua resposta com alguns comentários.
precisa
3
writerownão aceita vários argumentos.
26412 Amber
1
>>> w.writerow ("a", "b", "c") Traceback (última chamada mais recente): arquivo "<stdin>", linha 1, em <module> TypeError: writerow () usa exatamente um argumento (3 dados)
Amber
@ Amber que versão do python você usa?
Dmitry Zagorulkin
4
@ Amber desculpe-me. eu perdi []
Dmitry Zagorulkin
11
Se por qualquer motivo você queria fazê-lo manualmente (sem usar um módulo como csv, pandas, numpyetc.):
with open('myfile.csv','w')as f:for sublist in mylist:for item in sublist:
f.write(item +',')
f.write('\n')
Obviamente, lançar sua própria versão pode ser propenso a erros e ineficiente ... geralmente é por isso que existe um módulo para isso. Mas, às vezes, escrever o seu próprio texto pode ajudá-lo a entender como eles funcionam, e às vezes é mais fácil.
A parte boa é que você pode alterar algumas coisas para criar um arquivo csv melhor:
yourlist =[[...],...,[...]]
columns =["abcd","bcde","cdef"]#a csv with 3 columns
index =[i[0]for i in yourlist]#first element of every list in yourlist
not_index_list =[i[1:]for i in yourlist]
pd = pandas.DataFrame(not_index_list, columns = columns, index = index)#Now you have a csv with columns and index:
pd.to_csv("mylist.csv")
Certifique-se de indicar lineterinator='\n'quando criar o gravador; caso contrário, uma linha vazia extra poderá ser gravada no arquivo após cada linha de dados quando as fontes de dados forem de outro arquivo csv ...
Aqui está a minha solução:
with open('csvfile','a')as csvfile:
spamwriter = csv.writer(csvfile, delimiter=' ',quotechar='|', quoting=csv.QUOTE_MINIMAL, lineterminator='\n')for i in range(0, len(data)):
spamwriter.writerow(data[i])
Respostas:
O módulo CSV embutido do Python pode lidar com isso facilmente:
Isso pressupõe que sua lista está definida como
a
, como na sua pergunta. Você pode ajustar o formato exato do CSV de saída através dos vários parâmetros opcionais,csv.writer()
conforme documentado na página de referência da biblioteca vinculada acima.Atualização para Python 3
fonte
Você poderia usar
pandas
:fonte
pandas
se a biblioteca internacsv
pode fazê-lo.documentos oficiais: http://docs.python.org/2/library/csv.html
fonte
writerow
não aceita vários argumentos.Se por qualquer motivo você queria fazê-lo manualmente (sem usar um módulo como
csv
,pandas
,numpy
etc.):Obviamente, lançar sua própria versão pode ser propenso a erros e ineficiente ... geralmente é por isso que existe um módulo para isso. Mas, às vezes, escrever o seu próprio texto pode ajudá-lo a entender como eles funcionam, e às vezes é mais fácil.
fonte
O uso de csv.writer na minha lista muito grande levou um bom tempo. Decidi usar pandas, era mais rápido e fácil de controlar e entender:
A parte boa é que você pode alterar algumas coisas para criar um arquivo csv melhor:
fonte
A solução da Ambers também funciona bem para matrizes numpy:
fonte
Se você não deseja importar o
csv
módulo para isso, pode escrever uma lista de listas em um arquivo csv usando apenas os recursos internos do Pythonfonte
Certifique-se de indicar
lineterinator='\n'
quando criar o gravador; caso contrário, uma linha vazia extra poderá ser gravada no arquivo após cada linha de dados quando as fontes de dados forem de outro arquivo csv ...Aqui está a minha solução:
fonte
Que tal despejar a lista de lista em pickle e restaurá-la com o módulo pickle ? É bastante conveniente.
fonte
Recebi uma mensagem de erro ao seguir os exemplos com um parâmetro newline na função csv.writer. O código a seguir funcionou para mim.
fonte