忘備録

日々の調べ物をまとめる。アウトプットする。基本自分用。

【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 される可能性が高いので、こうしておけばコンパイルする時間を節約できる。

ということらしい。