5

HTML Webサイトを読んで、「Amiel、Henri-Frédéric」などの名前のリストを取得したとします。

名前のリストを取得するために、次のコードを使用してhtmlをデコードします。

f = urllib.urlopen("http://xxx.htm")
html = f.read()
html=html.decode('utf8')
t.feed(html)
t.close()
lista=t.data

この時点で、変数listaには次のような名前のリストが含まれています。

[u'アバタントゥオノ、ディエゴ'、...、u'アミエル、アンリ-フレデリック']

今私はしたい:

  1. これらの名前をDataFrame内に配置します。
  2. DataFrameをcsvファイルに保存します。
  3. DataFrameを介してPythonでcsvを読み取る

簡単にするために、上記の名前だけを考慮して、手順1〜3を完了しましょう。次のコードを使用します。

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

この時点で、次のエラーが発生します。

UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 67: invalid continuation byte      

上記のコードの最後の行を次のように置き換えた場合:

print uni

DataFrameを読み取ることはできますが、この問題を処理する正しい方法ではないと思います。

この議論について他のユーザーから投稿された多くの質問を赤字にしましたが、これを解決することはできませんでした。

4

1 に答える 1

9

to_csvメソッドとread_csv関数の両方がencoding引数を取ります。これを使って。そして、内部でユニコードを操作します。そうでない場合は、プログラム内でエンコード/デコードしようとすると、が得られます

import pandas as pd

name = u'Amiel, Henri-Fr\xe9d\xe9ric'
array = [name]
df = pd.DataFrame({'Names':array})
df.to_csv('names', encoding='utf-8')
uni = pd.read_csv('names', index_col = [0], encoding='utf-8')
print uni  # for me it works with or without print

アウト:

                   Names
0  Amiel, Henri-Frédéric
于 2013-03-25T08:02:36.343 に答える