質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

1790閲覧

MySQLの日本語データをPythonを用いてCSVファイルに書き込む方法について

u_k_statistics

総合スコア44

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/09/16 13:52

MySQLに入っているデータをPythonを用いて抽出し、それらをCSVファイルに書き込みたいのですが、数字はそのまま認識してくれるのですが、日本語のところが文字化けしてしまっています。
下のコードでpnはそれぞれ
あいうえ御
かきくけ子
などの漢字やひらがなが入り混じった文章が入っています。

connect

1 user='root', 2 password='', 3 host='xxxxxx') 4 cursor = connect.cursor() 5 for i in range(1): 6 fp = open('tmp.csv', 'aw') 7 8 sen = 'select distinct pn from 0916' 9 cursor.execute(sen) 10 res = cursor.fetchall() 11 pn_list = [] 12 for j in range(len(res)): 13 res_list2 = list(res[j]) 14 pn_list.append(res_list2.encode('utf-8')) 15 16 w = csv.writer(fp,delimiter=',') 17 18 for r in range(len(pn_list)): 19 w.writerow(pn_list[r])

とするのですが、CSVをみてみると例えば、文字化けした状態の表記が
?xA_DIFE.<>ejf'
のようになっているとしたら、文字化けしていないどころかCSVにはその文字が1セルに1文字ずつ入っている状態です。
どのようにしたら文字化けせずにCSVに1セル1要素(pn_list[r]ずつ)入るでしょうか?
ちなみにデータベースの構造は

pn

1

となっています。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

質問:pythonでmysqlconnectorを使う際 に同様な案件がありましたので、そちらに回答しました。

投稿2016/09/29 12:56

EloiseSeverin

総合スコア50

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

w = csv.writer(fp)

for r in pn_list: r = [s.encode('cp932') for s in r] w.writerow(r)

にしたところ、文字化けは治りました。
しかし、1セルに1文字ずつ入ってしまうという現状が打破できません。
どなたかよろしくお願いします。

投稿2016/09/16 14:05

u_k_statistics

総合スコア44

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/09/16 14:24

エクセルはMS932(CP932)以外の文字コードは認識しませんよ
退会済みユーザー

退会済みユーザー

2016/09/16 14:31

パイソンのことよくわからんが for j in range(len(res)): res_list2 = list(res[j]) pn_list.append(res_list2.encode('utf-8')) これ1文字づつにしてないか? 
u_k_statistics

2016/09/16 14:44

unknown00012さん 回答ありがとうございます。 resの要素数分for文をまわして要素を1つずつ取り出しているつもりなのですが、どのように書き直したら良いのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問