Zdaję sobie sprawę, że biblioteka csv w Pythonie zawsze generuje znaki końca linii DOS. Nawet jeśli używam trybu 'wb'
, nawet jeśli używam Linuksa. Ten kod zawsze używa '\r\n'
jako końca separatora linii. Jak mogę to zrobić, używając tylko '\n'
?Czy program piszący CSV w Pythonie zawsze używa znaków końca linii DOS?
Odpowiedz
Można give your writer
instancja zwyczaj lineterminator
argumentem konstruktora:
writer = csv.writer(f, lineterminator="\n")
może określić liniowiec jako kombinację dwóch znaków? – user1479571
@ user1479571 Czy próbowałeś? –
Jak Niklas answered The lineterminator argument pozwala na wybór zakończeń linii. Zamiast trudnego kodowania go do \n
, uniezależnić go od platformy, korzystając z platformy użytkownika line separator: os.linesep
.
import csv
import os
f = open('output.csv', 'wb')
writer = csv.writer(f, lineterminator=os.linesep)
writer.writerow([2,3,4])
f.close()
Dla osób, które znajdują ten wpis, nie przegap 'wb'
. Nie zauważysz problemu, jeśli go brakuje na niektórych platformach, takich jak GNU/Linux, ale ważne jest, aby otworzyć plik na binary mode na platformach, na których ma to znaczenie, takich jak Windows. W przeciwnym razie plik csv może zakończyć się zakończeniami linii, takimi jak \r\r\n
. Jeśli używasz 'wb'
i os.linesep
, zakończenia linii powinny być prawidłowe na wszystkich platformach.
, więc nawet jeśli utworzysz wersję "* niezależną od platformy *", twój skrypt jest nadal zależny od platformy, ponieważ musisz otworzyć go w systemie binarnym, ale tylko w razie potrzeby? Jeśli spróbuję 'wb' na Linuksie, otrzymuję komunikat o błędzie dla' writer.writeheader() ' –
Po prostu wypróbowałem to na Ubuntu 16.04, używając zarówno' writer' i 'DictWriter' z' wb', @CiprianTomoiaga, i to działa dobrze dla mnie. Proponuję zamieścić nowe pytanie z próbką kodu i komunikat o błędzie, a następnie dodaj komentarz tutaj z linkiem do Twojego pytania. –
@CiprianTomoiaga To nie działa z Pythonem 3. Moduł CSV zakłada, że może napisać zwykłe ciągi znaków, a tak nie jest, jeśli otworzysz plik za pomocą '' wb'' (otrzymasz "TypError") . Tak więc musisz otworzyć plik w następujący sposób: 'f = open ('output.csv', 'w', newline = '')' podczas korzystania z Pythona 3. Zobacz także [Dokumentacja CSV Pythona 3] (https: //docs.python.org/3.5/library/csv.html#csv.writer). – maxschlepzig
Specyfikacja CSV MIME nakazuje CRLF jako ogranicznik linii: https://tools.ietf.org/html/rfc4180 –
Wierzę, że czytnik csv * zawsze działa i nie można go zmienić, ale pytasz tylko o to o * pisarzu *, którego domyślną można zmienić. – smci