2015-10-21 20 views
5

Tôi đang sử dụng python 3.4 và tôi đang cố viết một danh sách các tên vào một tệp văn bản. Danh sách này là như sau:Python: viết danh sách có các ký tự không phải ASCII vào một tệp văn bản

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

tôi sử dụng đoạn mã sau để xuất danh sách:

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

Nhưng nó không hoạt động. Python có vẻ không thích các ký tự không phải ASCII và cung cấp cho tôi các lỗi sau:

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

Bạn có biết cách giải quyết vấn đề này không? Có thể viết các tập tin bằng UTF-8/unicode?

+2

Bạn đang sử dụng phiên bản nào? –

+0

Nó hoạt động. Tôi không nhận được bất kỳ lỗi nào trong python 2.7.6. –

+0

Tôi đang sử dụng Python 3.4, vấn đề có xuất phát từ đó không? –

Trả lời

9

Vấn đề được rằng tập tin là nhận openned với ascii mã hóa (mà có thể được những gì sẽ được trả về bởi locale.getpreferredencoding() cho môi trường của bạn). Bạn có thể thử mở bằng mã hóa chính xác (có thể là utf-8). Ngoài ra, bạn nên sử dụng câu lệnh with để nó xử lý việc đóng tệp cho bạn.

Đối với Python 2.x, bạn có thể sử dụng chức năng codecs.open() thay vì 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) 

Đối với Python 3.x, bạn có thể sử dụng được xây dựng trong chức năng open(), mà hỗ trợ encoding tranh cãi. Ví dụ -

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

Nó hoạt động! Cảm ơn rất nhiều =) –

+0

Làm việc cho tôi quá, tôi đã gặp rắc rối với điều này trong một thời gian dài! – linusg

2

thử điều này:

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

Nó dường như không hoạt động. Tôi sử dụng Python 3 bằng cách này, có lẽ vấn đề đến từ đó? –

+0

@BernEy, tôi đã kiểm tra, nó hoạt động với python3, giao diện điều khiển ur hỗ trợ uft-8 – Hackaholic

-1

Hãy thử sử dụng mã UTF-8. Bạn có thể bắt đầu bằng cách đặt # - - mã hóa: utf-8 - - ở đầu tệp .py của bạn.

+1

nếu đây là vấn đề, tệp sẽ không phân tích cú pháp – Eevee

0

phương pháp tốt nhất sẽ được chơi với unicodes

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

Output: Dejan Živković

+0

Trong Python 3, chuỗi là đối tượng unicode theo mặc định. Vì vậy, 'u' là một no-op. Câu trả lời này là một điều hợp lệ để làm nhưng tôi không nghĩ rằng nó giải quyết được vấn đề của OP. –

Các vấn đề liên quan