2012-02-29 12 views
8

Używam Pythona 2.6. Podczas pisania programu python do przetwarzania wyników kwerendy (w formacie csv) z serwera sql. Znalazłem, że nie obsługuje Unicode.Czy Python 3.1.3 obsługuje Unicode w module CSV?

Kiedy uruchamiam program z pliku csv, błąd poped się mówiąc:

for row in csvReader: 
Error: line contains NULL byte 

Po zapisaniu pliku csv w formacie ANSI/ASCII z UltraEdit, program działa w porządku.

Próbowałem dołączyć opcję kodowania, ale nie powiodło się:

csvReader = csv.reader(open(fname, mode='rb', encoding='unicode'), delimiter=',') 
TypeError: 'encoding' is an invalid keyword argument for this function 

csvReader = csv.reader(open(fname, mode='rb', encoding='utf-8'), delimiter=',') 
TypeError: 'encoding' is an invalid keyword argument for this function 

Zastanawiam się, czy to pyton 3 wsparcie Unicode odczyt. To może zaoszczędzić mi dużo pracy.

+0

Dlaczego nie uzyskać dostęp do SQL bezpośrednio z pytona? – Kimvais

+0

Python 3.1.3: 'open' * zdecydowanie * obsługuje i' encoding = 'argument, więc albo używasz innej wersji Pythona, albo przypadkowo nadpisałeś funkcję' open'. –

+0

Powiedziałem, że używam Pythona 2.6. Czy Python 3.1.3 nie będzie miał tego problemu? – lamwaiman1988

Odpowiedz

6

Python 3 zdecydowanie obsługuje kodowanie Unicode. Domyślam się, że podałeś błędne (lub nie?) Kodowanie podczas otwierania pliku CSV do odczytu. Zobacz: http://docs.python.org/release/3.1.3/library/functions.html#open

i spróbować czegoś takiego:

reader = csv.reader(open("foo.csv", encoding="utf-8")) 

Edytuj: Jeśli używasz Pythona 2.6, można osiągnąć ten sam rezultat z:

import codecs 
reader = csv.reader(codecs.open("foo.csv", encoding="utf-8")) 

jednak jeśli "Pobieranie bajtów null, twój plik może być zakodowany przy użyciu "utf-16", więc spróbuj, jeśli plik nie może zostać zdekodowany za pomocą utf-8.

+0

Próbowałem podać kodowanie, ale zwróciło błąd. Sprawdź moją edycję. – lamwaiman1988