2015-10-21 46 views
5

Sto usando python 3.4 e sto provando a scrivere un elenco di nomi in un file di testo. L'elenco è il seguente:Python: scrivere un elenco con caratteri non ASCII in un file di testo

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

Io uso il seguente codice per esportare l'elenco:

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

Ma non funziona. Python sembra non come caratteri non-ASCII e mi dà i seguenti errori:

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

fai a sapere se c'è un modo per risolvere questo problema? Forse è possibile scrivere file in UTF-8/Unicode?

+2

Quale versione stai utilizzando? –

+0

Funziona. Non ho alcun errore in python 2.7.6. –

+0

Sto usando Python 3.4, il problema viene da quello? –

risposta

9

Il problema è che il file è sempre openned con ascii codifica (che potrebbe essere ciò che viene restituito dalla locale.getpreferredencoding() per l'ambiente). Puoi provare ad optare per la codifica corretta (forse utf-8). Inoltre, dovresti usare la dichiarazione with in modo che gestisca la chiusura del file per te.

Per Python 2.x, è possibile utilizzare codecs.open() funzione invece di 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) 

Per Python 3.x, è possibile utilizzare la funzione built-in open(), che supporta encoding argomento. Esempio -

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

Funziona! Grazie mille =) –

+0

Ho lavorato anche per me, ho avuto problemi con questo per molto tempo! – linusg

2

provare questo:

>>> 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

Non sembra funzionare. A proposito, uso Python 3, forse il problema deriva da questo? –

+0

@BernEy, ho verificato, sta funzionando con python3, se la console supporta uft-8 – Hackaholic

-1

Provate ad usare codifica UTF-8. Puoi iniziare inserendo # - - codifica: utf-8 - - nella parte superiore del tuo file .py.

+1

se questo fosse il problema, il file non analizzerebbe nemmeno – Eevee

0

migliore metodo sarebbe quello di giocare con unicodes

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

uscita: Dejan Živković

+0

In Python 3, le stringhe sono oggetti unicode per impostazione predefinita. Quindi il 'u' è un no-op. Questa risposta è una cosa valida da fare ma non penso che risolva il problema dell'OP. –