【Python】URLエンコードされたテキストファイルをデコードしてファイル出力
URLエンコードされた文字列が吐かれたログファイルをデコードすることがあったので、お勉強がてら作ってみた。
環境
Python 2.7.10
ソース
f_cnv.py
#!/usr/bin/python # -*- coding: utf-8 -*- # 文字コードの指定:http://yono.cc/python/python_basics/japanese.html # コメント:http://python301.blog123.fc2.com/blog-entry-9.html import sys import urllib # 命名規約:http://nekowarau.seesaa.net/article/426647551.html def url_decode(input_path, output_path): # if文:http://www.pythonweb.jp/tutorial/if/index4.html # 論理演算子:http://www.pythonweb.jp/tutorial/if/index6.html if input_path == "" and output_path =="": sys.exit ("error: The number of parameters has to be 2" + "\n" + "info: First param is input file path, second param is output file path") print "input file is " + input_path + ", " + "output file is " + output_path # 数値=>文字列:http://www.pythonweb.jp/tutorial/string/index9.html # インデックス付きfor:http://www.gesource.jp/programming/python/code/0022.html """ strParam = "" for i, e in enumerate(param): strParam = strParam + " param[" + str(i) + "]" + "=" + e print "info: param is" + strParam """ # ファイル入力:http://www.yukun.info/blog/2008/06/python-file.html#readlines_8211_1 rf = open(input_path) lines = rf.readlines() rf.close() # ファイル出力:http://www.mwsoft.jp/programming/python/file.html wf = open(output_path, "w") for line in lines: # urlエンコード・デコード:http://python.g.hatena.ne.jp/mhrs/20060609/p1 decodedLine = urllib.unquote_plus(line); wf.write(decodedLine) print wf.close() # メイン関数的な:http://qiita.com/shunsuke227ono/items/a043bfa9998e7033de3a if __name__ == "__main__": # コマンドライン引数:http://www.python-izm.com/contents/basis/command_line_arguments.shtml param = sys.argv # 配列のサイズ:http://www.pythonweb.jp/tutorial/list/index5.html if len(param) != 3: # 終了メソッド:http://d.hatena.ne.jp/kakurasan/20110512/p1 sys.exit ("error: The number of parameters has to be 2" + "\n" + "info: First param is input file path, second param is output file path") url_decode(param[1], param[2])
使い方
第一引数に入力ファイル、第二引数に出力ファイルのパスを渡します。
スクリプトとして実行
例)encode.txtをデコードしてdecode.txtとして出力
$ ./f_env.py /home/hoge/Documents/encode.txt /home/hoge/Documents/decode.txt
モジュールとして実行
例)上記と同じ処理を対話型シェルで実行
$ python >>> import f_env >>> f_cnv.url_decode("/home/hoge/Documents/encode.txt", "/home/hoge/Documents/decode.txt")
.pycファイル
上記のモジュールとして実行で呼び出すと「f_env.pyc」というファイルが作られていた。
こいつはなんぞと思いググってみた。
.pycファイルを作成させない方法メモ - かせきのうさぎさん
Python で書かれたモジュールを import すると自動的に .pycファイルが作成される。このファイルはコンパイルして得られたバイトコードを保存したものだ。つまり一種のキャッシュである。モジュールは他のファイルからも import される可能性が高いので、こうしておけばコンパイルする時間を節約できる。
ということらしい。