Giả sử tôi đọc một trang web html và tôi nhận được một danh sách các tên, chẳng hạn như: 'Amiel, Henri-Frédéric'.Cách đọc một khung dữ liệu của các chuỗi được mã hóa từ csv trong python
Để có được danh sách các tên tôi giải mã html sử dụng đoạn mã sau:
f = urllib.urlopen("http://xxx.htm")
html = f.read()
html=html.decode('utf8')
t.feed(html)
t.close()
lista=t.data
Tại thời điểm này, biến Lista chứa một danh sách những cái tên như:
[u'Abatantuono , Diego ' ..., u'Amiel, Henri-Frédéric']
Bây giờ tôi muốn:
- đặt những tên này vào trong một DataFrame;
- lưu DataFrame vào tệp csv;
- đọc csv bằng Python qua một DataFrame
Để đơn giản, chúng ta hãy xem trong việc xem xét chỉ là tên ở trên để hoàn thành bước 1 đến 3. Tôi sẽ sử dụng đoạn mã sau:
name=u'Amiel, Henri-Fr\xe9d\xe9ric'
name=name.encode('utf8')
array=[name]
df=pd.DataFrame({'Names':array})
df.to_csv('names')
uni=pd.read_csv('names')
uni #trying to read the csv file in a DataFrame
Tại thời điểm này tôi nhận được lỗi sau:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 67: invalid continuation byte
Nếu tôi thay thế dòng cuối cùng của đoạn mã trên với:
print uni
Tôi có thể đọc DataFrame nhưng tôi không nghĩ đó là cách phù hợp để xử lý vấn đề này.
Tôi có nhiều câu hỏi được đăng bởi những người dùng khác về lập luận này nhưng tôi đã không giải quyết vấn đề này.
Xin lỗi, công trình code của bạn nhưng chỉ khi bạn sử dụng 'in uni' như dòng cuối cùng của mã. Nếu bạn cố gắng sử dụng chỉ 'uni' bạn nhận được lỗi: "UnicodeDecodeError: 'utf8' codec không thể giải mã byte 0xe9 ở vị trí 67: byte tiếp tục không hợp lệ" –
@ fabrizio_ff - phiên bản 'pandas' /' numpy' là gì bạn sử dụng? – root
@ root-- numpy: 1.6.2 // gấu trúc: 0.9.1. Tôi đã cố gắng sử dụng mã cuối cùng của bạn nhưng nếu tôi chỉ viết 'uni' tôi sẽ gặp lỗi tương tự (thay vào đó nó hoạt động với 'print uni'). –