FC2ブログ

Anaconda 学習:日本語文字コードの扱い

2018-05-23 :  PCクリニック
先日(2018-05-11)の記事:
Anaconda 学習:pandas で、Excel ファイル・アクセス」等の、
pandasと、

前回(2018-05-21)の記事「Anaconda 学習:PyAutoGUI 補足事項」等の
PyAutoGUIとを使って、

Excel ファイルにある“タイトル”一覧を、
個別 Excel ファイルに埋め込んでいく処理プログラムを作っている。

主な処理は、

入力 Excel ファイルは、pandas で読み込んで、データフレームにする。
このデータフレームの行単位で、
出力 Excel ファイルに、PyAutoGUI で書き出す。

ここで、全てが1バイト文字(ANK文字)では問題ないが、
2バイト文字(日本語文字)を扱うとき、
文字バケが発生する。

pyautogui.typewrite(~) は、日本語文字には使えないので、
クリップボード経由で send することにした。


原因を究明する為に、

「python string encode」検索を行った。

“Qiita”の
Python2のstr/unicodeとencode/decode

  はじめに
  Python2の文字列はややこしい。

  用語
  そもそもPythonに限らず、文字コード関連の話はややこしい。
  これはたぶん用語の使い方が人によって違うから。
  ここではまつもとゆきひろ コードの世界に載ってる次の定義に従う。

  ・・・・・
  ・・・・・

  2種類の文字列
  Python2には文字列が2種類ある。
  ここではその2つを str文字列 および unicode文字列 と呼び、
  これらをまとめて 文字列 と呼ぶ。
  公式ドキュメントでも用語があまり統一されていないので、
  とりあえずこう呼ぶことにする。

  先に言っておくと、基本的にunicode文字列を使うべき。

  str文字列
  ・'...' リテラルで生成されるオブジェクト
  ・UTF-8, Shift-JISなどの符号化方式によって各文字を符号化して得られる
   バイトを並べたもの
  ・1文字が複数バイトで表現されることもある
  ・str文字列そのものは、符号化に使われた符号化方式の情報をもたない
  ・符号化方式を知るには基本的に片っ端から試すらしい
  ・対話環境で 'あいう' と入力すると、 \x で1バイトずつ区切られたバイト列が返る

  ・・・・・
  ・・・・・

  unicode文字列
  ・u'...' リテラルで生成されるオブジェクト
  ・文字コードUCS-2上で各文字に対応する整数を並べたもの
  ・文字に対応する整数はUCS-2によって決められるため、
   符号化方式の違いを意識する必要がない
  ・対話環境で u'あいう' と入力すると、\u で1文字ずつ区切られた整数列が返る

  ・・・・・
  ・・・・・


とか、
“Cassiopeiaの日記”の
Pythonと日本語表示と文字コード、unicode 、str 、utf-8 、shift-jis

   Pythonは使いやすい覚えやすい気持ちいいとまで言う人もいる。
  たしかにその通りだと思った。
  しかし、日本語を使おうとした時に急に気持ち良くなくなる。
  そう感じたのは僕だけではないはずだ。

   ということで今日の日記のネタはPythonと日本語となりました。

  (WindowsXPにココから“Python 2.5.1 Windows installer”を
  インストールした環境でテストしています。)

  ・まずは、あなたが書いたコードはutf-8で保存する。
   そして、そのコードの先頭には以下を記入する。
# -*- coding: utf-8 -*-
  ・・・・・
  ・・・・・


とかが見つかったので、
これらで学習した。

そこで、
encodeを使ったテストプログラムで確認した。
# -*- coding: utf-8 -*-
# ======================
import win32clipboard
import pandas as pd
import pyautogui as pa

def set_clipboard( text ):
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText( text )
win32clipboard.CloseClipboard()

def send_C_keys( text ): # clipboard 経由 Send
set_clipboard( text )
pa.hotkey( 'ctrl', 'v' )

# ----------------------

Mxls = u'hoge.xls' # 入力 Excel ファイル
Txls = u'boge.xls' # 出力 Excel ファイル

# ----------------------

df = pd.read_excel( Mxls, header=None )
MT = df.dropna(subset=[1]).reset_index(drop=True) # B列がNaNの行
nn = len(MT)

# ----------------------

pa.moveTo( 1600, 300 ); pa.click()

pa.keyDown( 'shift' ); pa.click( button='right' )
pa.keyUp( 'shift' ); pa.press( 'w' )

pa.typewrite( 'start '+Txls ); pa.press( 'enter' )
xls = False
while not xls:
xls = pa.getWindow( 'Microsoft Excel' )
xls.set_foreground()

ID = MT.iloc[0,1] # これでループ予定
id = ID[0:13] # 出力する文字列

pa.moveTo( 350, 600 ); pa.click( clicks=2 )
send_C_keys( id.encode('shift_jis') )
pa.press( 'enter' )
これで、いけそうだ。


  honyarara.encode('utf-8')
とか、
  konyarara.encode('shift_jis')

を適切に
使わないと文字バケを起こすのダった。


大変勉強になった。


本日はここまで。


Anaconda ( Python ) 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


180408,12
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

人気blog Ranking/おきてがみ


おきてがみ
最新記事
カレンダー
07 | 2019/08 | 09
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク