Hatena::Groupfukuoka-py

tshpaper.py

2012-01-06

pythonの文字コードではまったとき

11:28

新年明けましておめでとうございます。

今年も、宜しくお願い致します。

以前、pythonエクセルを操作するという記事を書いたのですが、

それの続きで、python文字コードではまったので、備忘録。

はまったのは、エクセルからデータを抜いてきたときに、

文字コードというか型というかそれらが、バラバラになっているときに、

ファイルに書きだすとエラーになってしまう。

具体的には、

print type(val6)

の結果にint,str,unicodeの3種類がありました。

※val6はエクセルから取得したデータ(文字列

エラー的には以下のとおり

1. おそらく、unicodeをファイルに書きだす時にエラーになったのではないかと

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)

2. val6.encode('utf_8')したときにintが含まれていたのでエラーになった

TypeError: coercing to Unicode: need string or buffer, int found

いろいろとやり方考えたのですが、

以下の方法で対応しました。

1. intをstrに変更する

val6str = str(val6) if type(val6) is int else val6

2. strをencode('utf_8')する

val6str.encode('utf_8')

とりあえず、これで正常に出力できるようになりました。


文字コード関連で調べていたら、いろいろと方法があるみたいですが、

今回の件に関しては、すべて同様のエラーになりました。

まだまだ勉強不足だなと感じました。

## sys.stdoutをラップする
import codecs
f = open('test.txt','a')
f = codecs.lookup('utf_8')[-1](f)
f.write(out)
f.close()

参考URL:http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html

AtiaAtia2012/02/21 01:28That raelly captures the spirit of it. Thanks for posting.

avxvhdgyuwavxvhdgyuw2012/02/21 19:11t1OtgG <a href="http://dgjcspmllqsx.com/">dgjcspmllqsx</a>

avxvhdgyuwavxvhdgyuw2012/02/21 19:11t1OtgG <a href="http://dgjcspmllqsx.com/">dgjcspmllqsx</a>

ltpzygixlsltpzygixls2012/02/22 00:10QXO0Da , [url=http://cosfzbeyaezq.com/]cosfzbeyaezq[/url], [link=http://tblfvytkjgnx.com/]tblfvytkjgnx[/link], http://rsnfgrifjxyx.com/

lviplclviplc2012/02/29 01:52vR8uMy <a href="http://xnsvougdigft.com/">xnsvougdigft</a>

2011-12-22

pythonでエクセルを操作する

19:03

エクセルで管理している情報をtrac wikiに反映したい~

ということで、以下作りました。

使用しているmoduleは、

openpyxl です。


#!/usr/bin/env python
# - -  coding: utf-8 - -

# xlsxファイルを読み込むモジュール
from openpyxl.reader.excel import load_workbook

# オブジェクトの型を判断するためのモジュール
from types import *


# ファイルを読み込む
wb = load_workbook(filename = r'test.xlsx')

# シートを選択
# wb.get_sheet_by_name(name = "シート名")でも選択可能
# 日本語とか記号とか入ると面倒そうだったので、以下の方法で選択
ws0 = wb.worksheets[0]


for cellid in range(0,100):
    # ws0.cell(A1)といった指定も可能
    # ws0.range('A1:D5')といった指定も可能
    # 今回は、行と列を指定する方法でやってます
    c1 = ws0.cell(row = cellid, column = 1)
    c2 = ws0.cell(row = cellid, column = 4)
    c3 = ws0.cell(row = cellid, column = 6)
    c4 = ws0.cell(row = cellid, column = 7)
    c5 = ws0.cell(row = cellid, column = 8)

    # 値が入っていない場合、encodeしたときに怒られるので
    # NoneTypeの場合に'-'を変わりに入力するためのif文
    val1 = '-' if type(c1.value) is NoneType else c1.value
    val2 = '-' if type(c2.value) is NoneType else c2.value
    val3 = '-' if type(c3.value) is NoneType else c3.value
    val4 = '-' if type(c4.value) is NoneType else c4.value
    val5 = '-' if type(c5.value) is NoneType else c5.value

    # 値をファイルに出力
    out = "||" + val1.encode('utf_8') + "||" + val2.encode('utf_8') + "||" + val3.encode(
'utf_8') + "||" + val4.encode('utf_8') + "||" + val5.encode('utf_8') + "||" + '\n'
    #out = "||" + val1.encode('euc_jp') + "||" + val2.encode('euc_jp') + "||" + val3.enco
de('euc_jp') + "||" + val4.encode('euc_jp') + "||" + val5.encode('euc_jp') + "||" + '\n'
    f = open('test.txt','a')
    f.write(out)
    f.close()

BetsyBetsy2012/02/22 13:45At last! Someone with the ingshit to solve the problem!

cadalbocadalbo2012/02/23 20:30ILQN52 <a href="http://mqaqruqqgxwb.com/">mqaqruqqgxwb</a>

pydclmpvpydclmpv2012/02/24 01:162DEDkh , [url=http://lvbbftyugjrw.com/]lvbbftyugjrw[/url], [link=http://cfawbeqgxbse.com/]cfawbeqgxbse[/link], http://kjygjmxfisuq.com/

pkzougqvllcpkzougqvllc2012/02/29 20:259jI6uH <a href="http://xnmqsisojpva.com/">xnmqsisojpva</a>

ukazoyusreciukazoyusreci2017/03/20 15:16http://without-prescription-buyretin-a.net/ - without-prescription-buyretin-a.net.ankor <a href="http://doxycycline100mgbuy.com/">doxycycline100mgbuy.com.ankor</a> http://cialistadalafillowest-price.net/

ilagwottopconilagwottopcon2017/03/20 15:37http://without-prescription-buyretin-a.net/ - without-prescription-buyretin-a.net.ankor <a href="http://doxycycline100mgbuy.com/">doxycycline100mgbuy.com.ankor</a> http://cialistadalafillowest-price.net/

esewemuxesewemux2017/03/20 17:35http://without-prescription-buyretin-a.net/ - without-prescription-buyretin-a.net.ankor <a href="http://doxycycline100mgbuy.com/">doxycycline100mgbuy.com.ankor</a> http://cialistadalafillowest-price.net/

uvapocuaiuvapocuai2017/03/20 17:58http://without-prescription-buyretin-a.net/ - without-prescription-buyretin-a.net.ankor <a href="http://doxycycline100mgbuy.com/">doxycycline100mgbuy.com.ankor</a> http://cialistadalafillowest-price.net/

fikoxetagfikoxetag2017/03/21 10:37http://usa-onlineprednisone.net/ - usa-onlineprednisone.net.ankor <a href="http://salbutamol-ventolin-buy.net/">salbutamol-ventolin-buy.net.ankor</a> http://online-viagracanada.net/

oteqibicoteqibic2017/03/21 10:57http://usa-onlineprednisone.net/ - usa-onlineprednisone.net.ankor <a href="http://salbutamol-ventolin-buy.net/">salbutamol-ventolin-buy.net.ankor</a> http://online-viagracanada.net/