2017-03-13 18 views
9

Chcę przekonwertować plik csv na plik w formacie rzadkim z csv2libsvm.py (https://github.com/zygmuntz/phraug/blob/master/csv2libsvm.py).python csv2libsvm.py: AttributeError: Obiekt '_csv.reader' nie ma atrybutu "następny"

Plik CSV zawiera 37 atrybutów + etykietę (ostatnia kolumna). nie zawiera nagłówka ani indeksu. Exp z 1. rzędu: 63651000000,0,63651000000,0,153,19,,0,0,0,0,0,05,5,1,0,4,0,0,0,0,0,0,0,0,0,0,0 , 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1

Podczas przechwytywania następującego wiersza polecenia: python csv2libsvm.py Z. csv dane.txt 38 1

mam następujący błąd:

Traceback (most recent call last): 
    File "csv2libsvm.py", line 47, in <module> 
    headers = reader.next() 
AttributeError: '_csv.reader' object has no attribute 'next' 

Czy masz jakiś pomysł na temat tego problemu?

Odpowiedz

23

Wynika to z różnic między Python 2 i Python 3. Korzystanie z wbudowaną funkcją next w Pythonie 3. Oznacza to, że zamiast pisać next(reader)reader.next() w linii 47. Ponadto, należy otworzyć plik w tryb tekstowy. Zmień linię 47 na i = open(input_file, 'r').

+0

Więc zmodyfikowany csv2libsvm.py: 41 I = otwarte (input_file, 'r') 42 O = otwarte (plik_wynikowy ' wb”) 44 reader = csv.reader (i) 46 jeśli skip_headers: nagłówki = next (czytelnik), ale mam następujący błąd: Traceback (najnowsza rozmowę ostatnia): Plik„csv2libsvm.py ", wiersz 54, w label = line.pop (label_index) IndexError: indeks pop poza zakresem – Zoya

+0

To kolejny problem! "etykieta_indeksu" powinna być mniejsza niż liczba elementów w każdym wierszu. Spróbuj zbadać wartość 'label_index'. – Hossein

+0

Tak, dziękuję, mam inny błąd: Traceback (ostatnie ostatnie połączenie): Plik "csv2libsvm.py", wiersz 57, w o.write (new_line) TypeError: 'str' nie obsługuje interfejsu bufora Więc zmodyfikowałem linię 59: o.write (bytes (new_line, 'UTF-8')), działa, ale mam rzadki plik zawierający tylko 1 wiersz, który działa w ostatnim wierszu pliku csv !!!! – Zoya

0

Pythona 3.x:

Zastosowanie next(reader) zamiast reader.next()

Powiązane problemy