2015-10-21 39 views
5

Używam Pythona 3.4 i staram się napisać listę nazw do pliku tekstowego. Lista jest w następujący sposób:Python: napisz listę znaków spoza ASCII do pliku tekstowego

my_list = ['Dejan Živković','Gregg Berhalter','James Stevens','Mike Windischmann', 
       'Gunnar Heiðar Þorvaldsson'] 

używam następujący kod, aby wyeksportować listę:

file = open("/Users/.../Desktop/Name_Python.txt", "w") 
file.writelines("%s\n" % item for item in my_list) 
file.close() 

Ale to nie działa. Python wydaje się nie podoba znaków spoza ASCII i daje mi następujące błędy:

"UnicodeEncodeError: 'ascii' codec can't encode character '\u017d' in position 6: ordinal not in range(128)" 

Wiesz, czy istnieje sposób, aby rozwiązać ten problem? Być może możliwe jest zapisywanie plików w UTF-8/unicode?

+2

Z której wersji korzystasz? –

+0

To działa. Nie otrzymuję żadnego błędu w python 2.7.6. –

+0

Używam Pythona 3.4, czy problem pochodzi z tego? –

Odpowiedz

9

Problem jest, że plik jest uzyskiwanie openned z ascii kodowanie (co może być to, co jest zwracany przez locale.getpreferredencoding() dla środowiska). Możesz spróbować otworzyć z poprawnym kodowaniem (być może utf-8). Powinieneś także użyć instrukcji with, aby zająć się zamykaniem pliku.

dla Pythona 2.x, można użyć funkcji codecs.open() zamiast open() -

with codecs.open("/Users/.../Desktop/Name_Python.txt", "w",encoding='utf-8') as file: 
    file.writelines("%s\n" % item for item in my_list) 

dla Pythona 3.x, można skorzystać z wbudowanej funkcji open(), który obsługuje encoding argument. Przykład -

with open("/Users/.../Desktop/Name_Python.txt", "w",encoding='utf-8') as file: 
    file.writelines("%s\n" % item for item in my_list) 
+0

To działa! Bardzo dziękuję =) –

+0

Pracowałem też dla mnie, miałem z tym problemy przez długi czas! – linusg

2

spróbuj tego:

>>> my_list = ['Dejan Živković','Gregg Berhalter','James Stevens','Mike Windischmann' ,'Gunnar Heiðar Þorvaldsson'] 
>>> f = open("/Users/.../Desktop/Name_Python.txt", "w") 
>>> for x in my_list: 
...  f.write("{}\n".format(x)) 
... 
>>> f.close() 
+0

To nie działa. Używam Pythona 3 przy okazji, może problem pochodzi z tego? –

+0

@BernEy, sprawdziłem, jego praca z python3, czy obsługa konsoli ur uft-8 – Hackaholic

-1

Spróbuj użyć kodowania UTF-8. Możesz zacząć od umieszczenia # - - kodowania: utf-8 - - u góry pliku .py.

+1

jeśli to był problem, plik nawet nie parsował – Eevee

0

Najlepszy sposób byłoby grać z unicodes

my_list = [u'Dejan \u017Divkovi\u0107','Gregg Berhalter','James Stevens','Mike Windischmann' 
      ,u'Gunnar Hei\u00F0ar \u00FEorvaldsson'] 
print my_list[0] 

wyjściowa: Dejan Živković

+0

W Pythonie 3, łańcuchy są domyślnie obiektami unikodowymi. Tak więc 'u' jest" no-op ". Ta odpowiedź jest słuszna, ale nie wydaje mi się, żeby rozwiązała problem PO. –