- ベストアンサー
Pythonで日本語CSVからデータを読み込む方法について
- Pythonで日本語のCSVファイルからデータを読み込む方法について教えてください。
- 読み込んだCSVファイルの中身が日本語で表示されない問題が発生しています。プログラム内でのデータのやり取りは問題ないのでしょうか?
- 現在、Python初心者ですが、Mac上でCSVファイルからデータを読み込んでデータベースを作りたいです。解決策を試しても、うまくいかない状況です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あなたの言う「文字化け」とは、どんな状態なのでしょうか? {'\xe5\x90\x8d\xe5\x89\x8d': ' \xe5\xa4\xaa\xe9\x83\x8e', ... もし、こういう状態のものを指しているのなら、正しい動作です。 reader = csv.DictReader(inputfile) for r in reader: で辞書(dict型)として読み込んだr を print r で出力しています。 このようにdictをそのままprintすると、 {key1:val1, key2:val2,. ... } といった形式で出力されます。 このとき、key,val が文字列だった場合、ASCII(いわゆる半角英数記号)以外は \ を使ったエスケープシーケンスで出力されます。 '\xe5\x90\x8d\xe5\x89\x8d' は '名前' のUTF-8でのバイト列です。 for r in reader: print r for k,v in r.items(): print k,v のように、辞書rから鍵と値を取り出してprintすれば、文字列の出力となります。 これらの違いは、出力方法の違いであって中身は同じです。 > プログラム内でデータのやり取りをする分には問題ないのでしょうか? > (例えば、1番とX番の出身地が同じ、の判定をするとか) 難しいところです。 同じ文字コードで単純に==かどうか、程度の比較なら問題ありません。 しかし、正規表現を使ったり、文字数を数えたり、といった場合には、問題が発生します。 UTF-8の場合「名」という一文字が[\xe5\x90\x8d」という3文字から構成されています。 そのままprintすると1文字に見えますが、内部ではそれぞれ別の文字として扱います。 漢字を1文字として扱った方が便利な場合、unicode文字列を使う、というのが、Pythonでの常套手段です。 ですが、 csv モジュールでは unicodeに対応していません http://docs.python.jp/2/library/csv.html python unicode csv で検索すると、unicodeに対応させる方法等が見つかるので、それを使いましょう
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
str文字列を使う場合、printすれば、変換等無しに、そのまま、ターミナルに出力されます。 cat test.csv と、CSVファイルをそのまま端末に出力したら、同じ文字化けするのでは?
補足
お礼と補足を入力したつもりだったのですが、反映されておらず、遅くなって申し訳ありません。 丁寧にご回答頂いてありがとうございます。よく分かりました。 文字化けについてはその通り(\xe5\…という状態)で、正常な動作だと分かり安心しました。 それで、教えて頂いた書き方を試したのですが、今度は、英語は表示されますが日本語は�h�A�p�l という感じになってしまいます。 これは、どの文字コードで表示されている事になるのでしょうか…? unicodeへの対応、試してみます。 それから、python3にすればこの問題は起きない、という理解で正しいですか? そうだとすれば、これから学習するので3系にしようかな、とも思い始めました…。 再度の質問で申し訳ありませんが、アドバイス頂ければ幸いです。 ありがとうございます。