Konwertowanie listy do csv

Odpowiedz Nowy wątek
2018-12-19 21:30
0

Mam listę, której elementami są zdania (wycinek poniżej).

screenshot-20181219212419.png

Chciałbym zapisać ją do formatu csv. Próbowałem w następujący sposób:

import csv

with open("output.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(corpus)

W efekcie otrzymałem coś takiego:

screenshot-20181219212732.png

Co zrobić, aby w każdym wierszu zapisało się całe zdanie, bez podziału na litery?

Pozostało 580 znaków

2018-12-19 22:09
0

Daj:
writer.writerow(corpus)


Pozostało 580 znaków

2018-12-20 05:25
0
lion137 napisał(a):

Daj:
writer.writerow(corpus)

Przy takim rozwiązaniu nie rozbija mi zdań na litery, ale za to wszystko zapisuje się w jednym wierszu:
screenshot-20181220052455.png

Pozostało 580 znaków

2018-12-20 12:11
1

Jak wygląda Twoja lista (w programie)? writerow() dosłownie Tworzy jeden rząd z podanymi danymi. Więc jak mu podasz listę [row1, row2,row3] to zapisze to wszystko do jednego row traktując row1, row2..jak kolejne kolumny. Możesz np. ziterować Twoją listę:

for row in your_list:
    csv.writerow(row)

W Twoim pierwszym poście podejrzewam, że podałeś corpus, który jest stringiem (np. corpus = 'abcdef,gtd') a csvwriter traktuje to jako listę (czyli iteruje a,b,c,d,e..). W takim przypadku możesz podzielić corpus na poszczególne rzędy dzieląc na delimetrze - np. my_list = corpus.split(',')

Pozostało 580 znaków

2018-12-21 20:58
0
AsterFV napisał(a):

Jak wygląda Twoja lista (w programie)? writerow() dosłownie Tworzy jeden rząd z podanymi danymi. Więc jak mu podasz listę [row1, row2,row3] to zapisze to wszystko do jednego row traktując row1, row2..jak kolejne kolumny. Możesz np. ziterować Twoją listę:

for row in your_list:
    csv.writerow(row)

W Twoim pierwszym poście podejrzewam, że podałeś corpus, który jest stringiem (np. corpus = 'abcdef,gtd') a csvwriter traktuje to jako listę (czyli iteruje a,b,c,d,e..). W takim przypadku możesz podzielić corpus na poszczególne rzędy dzieląc na delimetrze - np. my_list = corpus.split(',')

Przy próbie podziału dostaję błąd: 'list' object has no attribute 'split'.
Z kolei po iteracji

with open("output.csv", "w", newline="") as f:
    for row in corpus:
        writer = csv.writer(f)
        writer.writerow(corpus)

otrzymałem coś takiego:
screenshot-20181221205754.png

w sumie 445 wierszy, czyli tyle ile jest elementów w liście.

Mój kod to był przykład w razie gdyby Twoje dane wejściowe były stringiem. Dlatego bez znajomości formatu Twoich danych nie jestem w stanie Ci pomóc :) Chodzi tu konkretnie o to jak wygląda corpus (jego zawartość w Pythonie). Ale swoją drogą zauważ, że masz błąd w ostatniej linijce = zamień corpus na row (chcesz zapisywać każdy rząd a nie dla każdego rzędu całą listę..stąd to co Ci wyszło) - AsterFV 2018-12-21 21:39

Pozostało 580 znaków

2018-12-22 00:48
1
with open("output.csv", "w", newline="") as f:
    for row in corpus:
        writer = csv.writer(f)
        writer.writerow(corpus)

Nic dzinwego, przecież tutaj:

writer.writerow(corpus)

zapisuejsz całą listę.
daj tam

writer.writerow(row)

I powinno działać.
czyli coś takiego:

 with csv.writer(open("output.csv", "w", newline="")) as writer:
     for row in corpus:
         writer.writerow(row)

No i zmieniłem też lokację utworzenia writera, żeby nie tworzyć go przy każdej iteracji po pętli - bez sensu tak co chwile zamykać/otwierać plik.

edytowany 2x, ostatnio: grski, 2018-12-22 01:05

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0