Pytanie Pisanie do CSV za pomocą Pythona dodaje puste linie [duplicate]


To pytanie już zawiera odpowiedź:

Próbuję napisać do pliku CSV, ale są między nimi puste wiersze. Jak mogę usunąć puste wiersze?

import csv
b = open('test.csv', 'w')
a = csv.writer(b)
data = [['Me', 'You'],\
        ['293', '219'],\
        ['54', '13']]
a.writerows(data)
b.close()

76
2018-02-04 19:03


pochodzenie


Nie potrzebujesz odwróconych ukośników na końcu definiowania linii data. Python ignoruje nowe linie w zamkniętych nawiasach kwadratowych, tzn. Między [ i ] - Zags
Popraw mnie, jeśli się mylę, ale ten backslash jest postacią kontynuacyjną, nieprawdaż? - KennethG
To jest stare, ale zauważyłem, że nikt nie odpowiedział. Znak kontynuacji nie jest potrzebny, jeśli masz przecinek. - gprx100
Zobacz też: Jak czytać i zapisywać pliki CSV w Pythonie? - Martin Thoma


Odpowiedzi:


Sposób w jaki używasz csv moduł został zmieniony w Pythonie 3 pod kilkoma względami (docs), przynajmniej jeśli chodzi o sposób otwierania pliku. W każdym razie coś w stylu

import csv
with open('test.csv', 'w', newline='') as fp:
    a = csv.writer(fp, delimiter=',')
    data = [['Me', 'You'],
            ['293', '219'],
            ['54', '13']]
    a.writerows(data)

powinno działać.


113
2018-02-04 19:15



BŁĄD: TypeError: "nowa linia" jest niepoprawnym argumentem słowa kluczowego dla tej funkcji? - Saad Bin Shahid
@SaadBinShahid: wtedy nie używasz Pythona 3. - DSM


Jeśli korzystasz z Pythona 2.x w systemie Windows, musisz zmienić linię open('test.csv', 'w') do open('test.csv', 'wb'). To znaczy, że powinieneś otworzyć plik jako plik binarny.

Jednak, jak stwierdzili inni, interfejs pliku zmienił się w Pythonie 3.x.


21
2018-02-04 19:05



jest to spowodowane tym, że Windows automatycznie dodaje znaki nl podczas pisania tekstu zamiast binarnego? - Gjordis
Próbowałem przez ten błąd: w.writrows (dane) "str" ​​nie obsługuje interfejsu bufora - user2031063
Używam python33 .... nie wiem, czy to ma znaczenie! - user2031063
@ user2031063 Wersja python nie powinna mieć znaczenia. Twój komunikat o błędzie sugeruje, że po prostu pomieszałeś swoje w i a obiekty. Czy na pewno masz wszystkie swoje nazwiska? - Wilduck
@Wilduck: to robi znaczenie, z której wersji Pythona korzysta OP, z powodu zmian 2/3 str / bajtów. - DSM


import csv

hello = [['Me','You'],['293', '219'],['13','15']]
length = len(hello[0])

with open('test1.csv', 'wb') as testfile:
    csv_writer = csv.writer(testfile)
    for y in range(length):
        csv_writer.writerow([x[y] for x in hello])

wytworzy takie wyjście

Me You
293 219
13 15

Mam nadzieję że to pomoże


15
2018-02-04 19:10



dziękuję, ale "wb" daje mi błąd. - user2031063
czy to ten sam błąd, który otrzymujesz? stackoverflow.com/questions/5471158/... - John Smith
czy rozwiązanie pomaga? - John Smith
NIE, nie ... Otrzymałem ten błąd - user2031063
skopiuj to, co mam bezpośrednio, działa to dla mnie - John Smith


Musisz otworzyć plik w formacie binarnym b tryb, aby zająć się pustymi liniami w Pythonie 2. Nie jest to wymagane w Pythonie 3.

Więc zmień open('test.csv', 'w') do open('test.csv', 'wb').


4
2018-02-04 19:06



Próbowałem przez ten błąd: w.writrows (dane) "str" ​​nie obsługuje interfejsu bufora. Używam python33.Nie wiem, czy to ma jakąkolwiek różnicę !! - user2031063


Pyexcel działa dobrze zarówno z Python2 i Python3 bez problemów.

Szybki montaż z pipem:

pip install pyexcel

Następnie wykonuje się tylko 3 wiersze kodu i zadanie:

import pyexcel
data = [['Me', 'You'], ['293', '219'], ['54', '13']]
pyexcel.save_as(array = data, dest_file_name = 'csv_file_name.csv')

2
2018-03-23 12:59