2015-09-13 16 views
16

Mam dwie listy, które chcę scalić w jedną tablicę, aby ostatecznie umieścić go w pliku csv. Jestem początkującym z tablicami Pythona, a ja nie rozumiem, jak można uniknąć tego błędu:TypeError: indeksy listy muszą być liczbami całkowitymi lub plasterkami, a nie str

def fill_csv(self, array_urls, array_dates, csv_file_path): 
    result_array = [] 
    array_length = str(len(array_dates)) 

    # We fill the CSV file 
    file = open(csv_file_path, "w") 
    csv_file = csv.writer(file, delimiter=';', lineterminator='\n') 

    # We merge the two arrays in one 

    for i in array_length: 
     result_array[i][0].append(array_urls[i]) 
     result_array[i][1].append(array_dates[i]) 
     i += 1 

    csv_file.writerows(result_array) 

I got:

File "C:\Users\--\gcscan.py", line 63, in fill_csv 
    result_array[i][0].append(array_urls[i]) 
TypeError: list indices must be integers or slices, not str 

jaki sposób moją pracę liczyć?

+2

Wyraźnie piszesz "array_length" ciąg znaków, więc 'i' to znak nie liczba ... – jonrsharpe

+0

Ooops, nie wyglądałem tak jak należy ... dziękuję !! – Zoloom

+1

przydarzyło mi się to, kiedy myślałem, że parsuję '{thisthing}' podczas gdy faktycznie analizowałem '[{thisthing}]'; np. próbowałem radzić sobie ze słownikiem, ale faktycznie miałem do czynienia z listą. Dynamiczne pisanie ftw. – Tommy

Odpowiedz

10

Najpierw array_length powinna być liczbą całkowitą, a nie ciągiem:

array_length = len(array_dates) 

drugie, pętla for powinien być skonstruowany przy użyciu range:

for i in range(array_length): # Use `xrange` for python 2. 

trzecie, i będzie zwiększać się automatycznie, więc usunąć w następującej linii:

i += 1 
+0

Dzięki, nie znałem automatycznej inkrementacji! :) Mój kod działa, dziękuję. – Zoloom

+0

Nie ma magii: 'i' jest elementem listy zwróconej przez zakres (lub sekwencję w pythonie 3). Oh, BTW: wszystkie są listami, a nie tablicami. – Pynchia