Pythonの2系から3系へのサクッとコンバートさせる方法
知り合いがurllib2からurllibへのコンバートが面倒だと嘆いていたので、そういうのをやりたくない人は大量にいる。。。。ということは、プログラマの三大美徳が十二分に活用されているはずよね!!!
三大美徳については、前の記事を参照してください。
というわけで、今回は2系から3系にコンバートする方法を紹介したいなと思います。
ただ、使える部分は限られているのでここに書いている方法はあくまで参考にしてください。また、バックアップはしっかり取っておいてくださいね。
とりあえず、一番最初に紹介するのは「2to3.py」という何ともそのままな名前のプログラムですかね。最近はあまり使われなくなったみたいですが、単純なプログラムを相手にするのであればまだまだ現役で使えるのではないでしょうか?
2to3.pyって?
2to3は先ほども書きましたが、Python2系で書かれたコードをPython 3系で動作するコードに変換するプログラム。
メリット
Pythonに同梱されているので、新たに何かをインストールする必要なく使うことができるというのがメリット。また、コンソールで1行書くだけで使える。
デメリット
逆にデメリットは、変換に関して2から3にのみ不可逆であること。あとは、標準パッケージに含まれているものぐらいしか変換できない。
使い方
2to3 -w パイソンファイルのパス
Windowsの場合は、最初にpython -mを書いておく必要がありますかね、きっと。
これで書いておくとバックアップとして元のファイルも残ります。
何が置き換わるのかは以下のコマンドでわかります。
2to3 -l
一番最初に書いたurllibとurllib2とか、xrangeとかはしっかり変換してくれました。
とりあえず以下のプログラムを用意してみました。
import urllib2 import json body = str.encode(json.dumps(data)) headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)} url = 'https://*******' req = urllib2.Request(url, body, headers) try: response = urllib2.urlopen(req) result = response.read() print(result) except urllib2.HTTPError, error: print("The request failed with status code: " + str(error.code)) print(json.loads(error.read()))
これを変換してみますとこんな感じになりました。
import urllib.request, urllib.error, urllib.parse import json body = str.encode(json.dumps(data)) headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ api_key)} url = 'https://****' req = urllib.request.Request(url, body, headers) try: response = urllib.request.urlopen(req) result = response.read() print(result) except urllib.error.HTTPError as error: print(("The request failed with status code: " + str(error.code))) print((json.loads(error.read())))
これぐらいには変換してくれるから、まあ便利ではありますよね!
ただ標準ライブラリぐらいしか変換してくれないことにはご注意を
python-modernizeとかsixなんていうライブラリもあるのでいろいろ試して怠惰に最高のパフォーマンスを得られるようにしてきましょ