Próbuję utworzyć plik .csv z wartościami z listy w języku Python. Kiedy wypisuję wartości na liście, wszystkie są w formacie Unicode (?), Czyli wyglądają mniej więcej tak
[u'value 1', u'value 2', ...]
Jeśli iteruję przez wartości na liście, tj for v in mylist: print v
. Wydają się być zwykłym tekstem.
I mogę umieścić ,
między każdym zprint ','.join(mylist)
I mogę wyprowadzić do pliku, tj
myfile = open(...)
print >>myfile, ','.join(mylist)
Ale chcę wyprowadzać do pliku CSV i mieć ograniczniki wokół wartości na liście, np
"value 1", "value 2", ...
Nie mogę znaleźć prostego sposobu na umieszczenie separatorów w formatowaniu, np. Próbowałem użyć join
instrukcji. W jaki sposób mogę to zrobić?
Odpowiedzi:
Edycja: działa tylko z Pythonem 2.x.
Aby pracować z Pythona 3.x wymiany
wb
zw
( zobacz ten SO odpowiedź )źródło
csv
moduł w 2.x nie radzi sobie poprawnie z unikodami; przykłady, jak sobie z tym poradzić, znajdziesz w dokumentacji modułu. docs.python.org/library/csv.htmlTypeError: 'str' does not support the buffer interface
.'w'
tutaj: stackoverflow.com/questions/34283178/…Oto bezpieczna wersja aplikacji Alexa Martellego:
źródło
with
, upewniając się, że plik jest zamknięty po zakończeniuwr.writerow(my_list)
wewnątrz pętli?Na innym podejściu, można użyć DataFrame w pand : A może to łatwo zrzucić danych do pliku CSV, podobnie jak poniższy kod:
źródło
Najlepsza opcja, jaką znalazłem, to użycie
savetxt
znumpy
modułu :W przypadku, gdy masz wiele list, które muszą być ułożone w stos
źródło
Użyj
csv
modułu Pythona do czytania i pisania plików rozdzielanych przecinkami lub tabulatorami. Preferowany jest moduł csv, ponieważ zapewnia dobrą kontrolę nad kwotowaniami.Na przykład, oto przykład pracy dla Ciebie:
Produkuje:
źródło
out = csv.writer(open("myfile.csv","w"), delimiter=',',quoting=csv.QUOTE_ALL))
wypełnia dane, bez względu na to, czy umieścisz,open("myfile.csv","w")
czy nowy plikopen("myfile2.csv","w")
. Wydaje się, że obiekt wyjściowy nie może poradzić sobie z obiektem pliku zbudowanym podczas wykonywania, ale przechowuje proces wyjściowy jako zadanie do wykonania. Innymi słowy: obiekt out przechowuje obiekt pliku w pierwszym uruchomieniu, ale zapisuje tylko wtedy, gdy obiekt pliku już istnieje! Zobacz odpowiednie rozwiązanie poniżej @Saurabh AdhikaryW tym przypadku możesz użyć metody string.join.
Podziel na kilka wierszy dla większej przejrzystości - oto sesja interaktywna
Lub jako pojedyncza linia
Jednak możesz mieć problem z tym, że twoje ciągi znaków mają osadzone cudzysłowy. Jeśli tak jest, musisz zdecydować, jak przed nimi uciec.
Moduł CSV może dbać o to wszystko dla ciebie, co pozwala na wybór pomiędzy różnymi opcjami cytując (wszystkie pola, pola tylko z cytatami i separatory, tylko non pól numerycznych, etc) i jak charecters kontroli Esacpe (cudzysłów, lub uciekające ciągi). Jeśli twoje wartości są proste, string.join prawdopodobnie będzie OK, ale jeśli musisz zarządzać wieloma przypadkami brzegowymi, użyj dostępnego modułu.
źródło
To rozwiązanie brzmi szalenie, ale działa gładko jak miód
Plik jest zapisywany przez csvwriter, dlatego właściwości csv są zachowane, tj. Oddzielone przecinkami. Separator pomaga w głównej części, za każdym razem przenosząc elementy listy do następnego wiersza.
źródło
data = [["value %d" % i, "value %d" % (i+1)] for i in range(1,4)] with open("myfile.txt","w") as f: out = csv.writer(f, quoting=csv.QUOTE_ALL, delimiter='\n') out.writerow([';'.join(x) for x in data])
Tworzenie i zapisywanie w pliku CSV
Poniższy przykład demonstruje tworzenie i pisanie pliku csv. aby utworzyć dynamiczny program do zapisywania plików, musimy zaimportować pakiet import csv , a następnie utworzyć wystąpienie pliku z odniesieniem do pliku Np .: - z otwartym ("D: \ sample.csv", "w", newline = "" ) jako autor_pliku
tutaj jeśli plik nie istnieje we wspomnianym katalogu plików, to python utworzy ten sam plik w określonym katalogu, a „w” reprezentuje zapis, jeśli chcesz odczytać plik, zamień „w” na „r” lub dopisz do istniejącego pliku, a następnie „a”. newline = "" określa, że usuwa dodatkowy pusty wiersz za każdym razem, gdy tworzysz wiersz, więc aby wyeliminować pusty wiersz, używamy newline = "", tworzymy niektóre nazwy pól (nazwy kolumn), używając list takich jak fields = ["Names", "Age "," Class "] , a następnie zastosuj do instancji pisarza, takiej jak writer = csv.DictWriter (file_writer, fieldnames = fields) tutaj, używając edytora Dictionary i przypisując nazwy kolumn, aby zapisać nazwy kolumn w csv, używamy writer. , podczas gdy wartości pliku muszą być przekazywane przy użyciu metody słownikowej, tutaj kluczem jest nazwa kolumny, a wartość to odpowiednia wartość klucza
źródło
Notatnik Jupyter
Powiedzmy, że Twoja lista jest
A
Następnie możesz zakodować następującą reklamę, którą będziesz mieć jako plik csv (tylko kolumny!)
źródło
na pewno powinieneś użyć modułu CSV, ale są szanse, że musisz napisać Unicode. Dla tych, którzy muszą pisać unicode, oto klasa z przykładowej strony, której możesz użyć jako modułu util:
źródło
Oto kolejne rozwiązanie, które nie wymaga
csv
modułu.Przykład:
Jeśli jednak początkowa lista zawiera jakieś ", nie zostaną one zastąpione. Jeśli jest to wymagane, można wywołać funkcję, aby zmienić jej znaczenie w następujący sposób:
źródło