pythonの学習記録1
今はシェルスクリプトしか使えないのですが、サーバーエンジニアとして仕事の幅を広げたいため、今日からpythonを学習したいと思います
環境
- CentOS5.4
- python-2.4.3-27
処理の流れ
- 引数で入力ファイル名、一時ファイル名、置き換える内容を記載したファイル名を指定
- 入力ファイルを日付つき(.YYYYMMDD)でバックアップ
- 入力ファイルを一行ずつ読み込み
- ddddと一致したら置き換える内容を記載したファイルの内容を一時ファイルに書き込む
- 一致しない場合は入力ファイルの内容をそのまま書き込む
- 入力ファイルと一時ファイルの差分を表示する
- 一時ファイルを入力ファイルに上書きして良いか確認するよう表示し、入力を待つ
- 確認に「y」が入力された場合一時ファイルを入力ファイルに上書きする
作成したスクリプト
#!/usr/bin/python import sys import datetime import shutil import difflib import re src_file = sys.argv[1] tmp_file = sys.argv[2] add_file = sys.argv[3] bk_file = src_file + "." + datetime.date.today().strftime("%Y%m%d") ## Backup shutil.copy(src_file, bk_file) ## Modify pattern = re.compile('dddd') f1 = open(src_file, 'r') f2 = open(tmp_file, 'w') f3 = open(add_file, 'r') while 1: s = f1.readline() if not s: break if pattern.match(s): add_list = f3.readlines() for add in add_list: f2.write(add) else: f2.write(s) f1.close() f2.close() ## Diff f1 = open(src_file, 'r') f2 = open(tmp_file, 'r') a = f1.readlines() b = f2.readlines() for buf in difflib.context_diff(a, b,n=0): print buf f1.close() f2.close() ## Confirm user_input = raw_input("Ovewrite?(y/n)") ## Overwrite if user_input == "y": print "Copy " + tmp_file + " To " + src_file shutil.copy(tmp_file, src_file) sys.exit(0) else: sys.exit(1)