Mam długą listę list w następującym formacie ---
a = [[1.2,'abc',3],[1.2,'werew',4],........,[1.4,'qew',2]]
tzn. wartości na liście są różnych typów - float, int, strings. jak zapisać je do pliku csv, aby mój wyjściowy plik csv wyglądał jak
1.2,abc,3
1.2,werew,4
.
.
.
1.4,qew,2
Odpowiedzi:
Wbudowany moduł CSV Pythona może sobie z tym łatwo poradzić:
Zakłada się, że Twoja lista jest zdefiniowana tak
a
, jak w pytaniu. Możesz dostosować dokładny format wyjściowego pliku CSV za pomocą różnych parametrów opcjonalnych,csv.writer()
zgodnie z dokumentacją na stronie referencyjnej biblioteki, do której link znajduje się powyżej.Aktualizacja dla Pythona 3
źródło
Możesz użyć
pandas
:źródło
pandas
jeśli wbudowana bibliotekacsv
może to zrobić.oficjalne dokumenty: http://docs.python.org/2/library/csv.html
źródło
writerow
nie przyjmuje wielu argumentów.Jeśli z jakiegoś powodu chciał zrobić to ręcznie (bez użycia modułu jak
csv
,pandas
,numpy
itd.):Oczywiście toczenie własnej wersji może być podatne na błędy i nieefektywne ... dlatego zazwyczaj jest do tego odpowiedni moduł. Ale czasami pisanie własnych może pomóc ci zrozumieć, jak działają, a czasami jest to po prostu łatwiejsze.
źródło
Używanie csv.writer na mojej bardzo dużej liście zajęło sporo czasu. Postanowiłem użyć pand, było to szybsze i łatwiejsze do kontrolowania i zrozumienia:
Dobrze, że możesz coś zmienić, aby utworzyć lepszy plik CSV:
źródło
Rozwiązanie Ambers działa również dobrze w przypadku tablic numpy:
źródło
Jeśli nie chcesz w tym celu importować
csv
modułu, możesz zapisać listę list do pliku csv używając tylko wbudowanych Pythonaźródło
Pamiętaj, aby wskazać
lineterinator='\n'
podczas tworzenia pisarza; w przeciwnym razie dodatkowa pusta linia może zostać zapisana w pliku po każdym wierszu danych, gdy źródła danych pochodzą z innego pliku csv ...Oto moje rozwiązanie:
źródło
Co powiesz na zrzucenie listy listy do marynaty i przywrócenie jej za pomocą modułu marynowania ? To całkiem wygodne.
źródło
Otrzymałem komunikat o błędzie, gdy postępowałem zgodnie z przykładami z parametrem nowej linii w funkcji csv.writer. Poniższy kod zadziałał dla mnie.
źródło