MAYA,Python [MAYA Python] codecsモジュールで日本語のテキストファイルを読み込む方法-MAYA アーティストのスクリプト入門-

[MAYA Python] codecsモジュールで日本語のテキストファイルを読み込む方法-MAYA アーティストのスクリプト入門-

maya_python_codecs_open_topimage

「MAYAのPythonで日本語で書かれたテキストファイルを読み込んだら文字化けしてしまう」

Pythonでファイルを読み込むには

open()

の関数を使いますが、Python2.x系とPython3.x系ではエンコーディング引数の有無に違いがあります。

Python3.x系のopen関数では

open("textfile","r",encoding="utf-8")

の様に読み込む際に文字コードを指定する事が可能ですが、Python2.x系のopen関数では指定が出来ません。

そのためPython2.x系で文字コードをutf-8で保存した日本語などの2バイトで書かれたテキストファイルをopen()で開くと


textfile_utf8.txt

textfile_utf8.txt

Python2.7:

textfile = "D:/liquidJumper/textfile_utf8.txt"

open_textfile = open(textfile)

textfile_read = open_textfile.read()

print(textfile_read)

open_textfile.close()


結果:

文字化けしてしまいます。

譚ア莠ャ・嗾okyo
逾槫・亥キ・kanagawa
蜊・痩:chiba
蝓シ邇・saitama



そしてこの記事の主な対象であるMAYAに実装されているPythonのバージョンを調べてみると。

import sys
print(sys.version)


結果:

MAYA2020に実装されているPythonはPython2.7.11だと分かりました。

2.7.11 (default, Jul  1 2016, 02:08:48) [MSC v.1900 64 bit (AMD64)]


あらためてPython2.7のopen関数では文字コードを指定する事は出来ません。

なので通常open関数を使いMAYAで日本語のテキストファイルを読み込む場合は

textfile = "D:/liquidJumper/textfile_utf8.txt"

open_textfile = open(textfile)

textfile_read = open_textfile.read()

print(textfile_read.decode(encoding="utf-8"))

open_textfile.close()


説明:

print(textfile_read.decode(encoding="utf-8"))

読み込んだテキストをdecode()で文字コード変換。

結果:

文字化け無くテキストファイルの内容が出力されました。

東京:tokyo
神奈川:kanagawa
千葉:chiba
埼玉:saitama


このdecode()で文字コードを変換する一手間を回避し、文字コードを指定してファイルを開く方法として

codecsモジュール

があります。

この記事では、Pythonのcodecsモジュールを使った日本語などのマルチバイトでか書かれたテキストファイルを文字コード指定で読み込む方法を紹介します。

Pythonのcodecsモジュールとは

codecsモジュールは文字コードをshift-jisからutf8に変換できるなど、任意にエンコードやデコードを行えるPythonの標準ライブラリモジュールです。

Pythonで文字コードを指定してテキストファイルを読み込む

Pythonで日本語を含むマルチバイト文字を読み込む際は、codecsモジュールを使い文字コードを指定して読み込むことができます。


文字コードをutf8で保存したテキストファイル

ファイル名:textfile_utf8.txt

textfile_utf8.txt
import codecs

textfile = "D:/liquidJumper/textfile_utf8.txt"
open_utf8 = codecs.open(textfile, 'r', 'utf-8')

print(open_utf8.read())

open_utf8.close()


説明:

open_utf8 = codecs.open(textfile, 'r', 'utf-8’)

codecs.open()を使って文字コード”utf-8”で開きます

print(open_utf8.read())

代入された変数「open_utf8」をread()で読み込みprint()で出力

open_utf8.close()   

Fileオブジェクトopen_utf8を閉じます

結果:

テキストファイルの内容が出力されました

東京:tokyo
神奈川:kanagawa
千葉:chiba
埼玉:saitama

Pythonで文字コードを指定してテキストファイルを作成する

文字コード”utf-8″のテキストファイルに文字列を追記する方法です


文字コードをutf-8に指定したテキストファイル作成しました。
ファイル名:new_textfile.txt

new_textfile.txt


文字コード:UTF-8で保存

文字コード:UTF-8で保存
# coding:utf-8

import codecs

filepath = "D:/liquidJumper/new_textfile.txt"

textfile_new = codecs.open(filepath ,"a", "utf_8")

textfile_new.write(u"アイウエ:カタカナ")

textfile_new.close()


説明:

textfile_new = codecs.open(filepath ,"a", "utf_8")

文字コード”utf-8”で新規作成

textfile_new.write(u"アイウエ:カタカナ")

テキストの内容を記入

textfile_new.close()

Fileオブジェクトnew_fileをクローズ

結果:

文字コードUTF-8の状態でテキストファイルに文字列が追記されました。

テキストファイルに文字列が追記

文字コードUTF-8の状態

MAYAでcodecs()を使って日本語を含むテキストファイルを読み込む

「MAYAで文字コード”utf-8”で保存した日本語が混ざったテキストファイルを読み込む」

open()を使って文字コードを指定しない場合

window = cmds.window()
cmds.rowColumnLayout( numberOfColumns=2, columnAttach=(1, 'right', 0), columnWidth=[(1, 100), (2, 250)] )
textstr = cmds.textField(w=350,h=100)
cmds.showWindow( window )


textfile = "D:/liquidJumper/textfile_utf8.txt"
open_utf8 = open(textfile)
cmds.textField(textstr,e=True,text=open_utf8.read())

open_utf8.close()


説明:

cmds.textField(textstr,e=True,text=open_utf8.read())

open()を使って開いたFileオブジェクトを.read()で読み込み、テキストフィールドに入力

結果:

文字化けしてテキストフィールドに表示されました。

文字化けしてテキストフィールドに表示

codecs()で文字コードを指定した場合

import codecs

window = cmds.window()
cmds.rowColumnLayout( numberOfColumns=2, columnAttach=(1, 'right', 0), columnWidth=[(1, 100), (2, 250)] )
textstr = cmds.textField(w=350,h=100)
cmds.showWindow( window )

textfile = "D:/liquidJumper/textfile_utf8.txt"
open_utf8 = codecs.open(textfile, 'r', 'utf-8')
cmds.textField(textstr,e=True,text=open_utf8.read())

open_utf8.close()


説明:

open_utf8 = codecs.open(textfile, 'r', 'utf-8')
cmds.textField(textstr,e=True,text=open_utf8.read())

codecs()を使って文字コード”utf-8″に指定して開き、read()で読み込んだテキストファイルの内容をテキストフィールドに入力


結果:

文字化けしないでテキストフィールドに表示されました。

文字化けしないでテキストフィールドに表示

まとめ

Pythonで文字コードを指定してテキストファイルを読み込む方法を紹介しました。

Python3.x系と違いPython2.x系のopen関数は文字コードの指定ができません。

そしてこの記事の対象でもあるMAYAのPythonはPython2.x系が使われているため、個人的にMAYAで外部ファイルを取り扱う場合は今回紹介したcodecs()の使用の検討をオススメします。

おすすめの関連記事:



コチラの記事も読まれています
あわせてよく読まれている記事