2014/09/09(火) [n年前の日記]
#1 [python] Python勉強中
昨日悩んでた部分について動作確認。Windows7 + Python 2.6.6。
_よりPythonicなPythonを目指して(前編):Python 3が後方互換性を捨ててでも求めたもの (2/2) - @IT によると、Python 3.0 では str型が無くなったらしいので、Python 3.x で動かすと違う動作になるんだろうなと。そもそも print のところを書き換えないと動かないけど。
''' codecs、os.walk() の動作確認 ''' import codecs import os import pprint def main(): # 指定されたパス以下のファイル一覧を取得 flist = {} for root, dirs, files in os.walk(".\\testdir"): for file in files: print root, dirs name, ext = os.path.splitext(file) # ファイルパスをベース名と拡張子に分ける name = name.decode('sjis') # sjis -> unicode に変換してる? path = os.path.abspath(os.path.join(root, file)) flist[name] = path # ハッシュ(辞書)に記録 print type(file), file print type(name), name, type(path), path print # sjisで書かれたテキストファイルを読み込み data = codecs.open("sjis_text.txt", 'r', 'sjis') for linedata in data: linedata = linedata.rstrip('\r\n') # 行末の改行を削除。Perlのchomp相当 print type(linedata), linedata if flist.has_key(linedata): print u"[%s]はあります" % linedata else: print u"[%s]はありません" % linedata print if __name__ == '__main__': main()以下は動作結果。
.\testdir\日本語ディレクトリ\サブディレクトリ [] <type 'str'> 日本語ファイル名.txt <type 'unicode'> 日本語ファイル名 <type 'str'> C:\home\prg\python\test_codecs\testdir\日本語ディレクトリ\サブディレクトリ\日本語ファイル名.txt .\testdir\表示 [] <type 'str'> 表示.txt <type 'unicode'> 表示 <type 'str'> C:\home\prg\python\test_codecs\testdir\表示\表示.txt <type 'unicode'> 日本語ファイル名 [日本語ファイル名]はあります <type 'unicode'> 表示 [表示]はあります <type 'unicode'> 存在しないファイル名 [存在しないファイル名]はありません
_よりPythonicなPythonを目指して(前編):Python 3が後方互換性を捨ててでも求めたもの (2/2) - @IT によると、Python 3.0 では str型が無くなったらしいので、Python 3.x で動かすと違う動作になるんだろうなと。そもそも print のところを書き換えないと動かないけど。
◎ 古いアプリと昔のPythonを紐づける方法は無いのかな。 :
例えば GIMP 2.6.x は Python 2.6 を決め打ちで要求してくるわけで、GIMP 2.6.x + Python-fu を使いたいと思ったら、そのOS上で動く Python を 2.6 にしておかないといかんわけですよ。今時、Python 2.6 に固定って…。Python 3.x とまでは行かなくても、せめて Python 2.7 ぐらいは使いたいわけで…。
古いアプリを動かす時だけ、Python 環境を2.6にする、みたいな設定・工夫はできないものかと。batファイルで環境変数を書き換えて、とか以前試してみた記憶もあるけど、上手くいかなかった、そんな記憶もあるような、ないような。
比較的新しいアプリは、アプリと一緒に Python を実行するための何か(.dll?)も一緒に入ってるようで、Python バージョンの制限を受けない・各アプリが同梱のPythonを決め打ちで使ってるから問題無いのですけど。昔のアプリが…どうしたもんか…。仮想PCでも使って、などと考えたりもするけど、Python のせいで Windowsライセンスをもう一つ買うなんてアホかって感じだし。…いや、GIMP 2.6.x を動かしたいだけなら、Linux でもいいのか。
というか、GIMP 2.6.x でしか動かないプラグイン・Python-fuスクリプトがあるってのがクソなんですけど。GIMP 2.8.x 上でも動いてくれれば悩まなくて済むのに。
古いアプリを動かす時だけ、Python 環境を2.6にする、みたいな設定・工夫はできないものかと。batファイルで環境変数を書き換えて、とか以前試してみた記憶もあるけど、上手くいかなかった、そんな記憶もあるような、ないような。
比較的新しいアプリは、アプリと一緒に Python を実行するための何か(.dll?)も一緒に入ってるようで、Python バージョンの制限を受けない・各アプリが同梱のPythonを決め打ちで使ってるから問題無いのですけど。昔のアプリが…どうしたもんか…。仮想PCでも使って、などと考えたりもするけど、Python のせいで Windowsライセンスをもう一つ買うなんてアホかって感じだし。…いや、GIMP 2.6.x を動かしたいだけなら、Linux でもいいのか。
というか、GIMP 2.6.x でしか動かないプラグイン・Python-fuスクリプトがあるってのがクソなんですけど。GIMP 2.8.x 上でも動いてくれれば悩まなくて済むのに。
[ ツッコむ ]
以上、1 日分です。