windowsのバッチファイル(.bat)とpython3を使い、特定のフォルダ配下にあるファイル内の文字列を置換する方法を紹介します。
ここで紹介する方法は、置換前のファイルの文字コードが「UTF-8」で、改行コードが「LF」のものとし、置換後も同じ文字コードと改行コードで上書きする方法です。
注意書き
紹介する方法では、置換後のファイルで上書き保存しますので、置換前のファイルが必要な場合はバックアップしてください。
前提条件
使用するパソコンのOSはwindows10とし、既にpython3がインストールされ、パスが通っている状態。
手順
1.以下を「str_replace.bat」というファイル名で保存する。
python str_replace.py [対象とするディレクトリ] "置換する対象文字列" "置換後の文字列"
pause
上記のファイル内に置換させたいファイルがあるフォルダを[対象とするディレクトリ]に、置換前の文字列を”置換する対象文字列”に、置換後の文字列を”置換後の文字列”に記入します。
複数存在する場合は、同様に追記してください。
2.以下を「str_replace.py」というファイル名で保存する
こちらのソースは、参考文献2のソースをベースに変更を加えたものです。元ソースを見たい方は、参考文献2を参照ください。
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import os
import argparse
import re
def main():
parser = argparse.ArgumentParser(description='how to use')
parser.add_argument('path_src', action='store')
parser.add_argument('str_src', action='store')
parser.add_argument('str_dst', action='store')
parser.add_argument('--reg', '-r', dest='reg',action='store_true', help='use regular expression')
parser.add_argument('--copy', '-c', dest='cp',action='store_true', help='save as new file')
args = parser.parse_args()
file_list = os.listdir(args.path_src)
file_path = args.path_src
for file in file_list:
if os.path.isdir(os.path.join(file_path, file)):
print(file , "is directory")
else:
f = open(file_path + "/" + file)
src = f.read()
f.close()
if args.reg:
rsrc = r'%s' % args.str_src
pattern = re.compile(rsrc)
dst = pattern.sub(args.str_dst, src)
else:
dst = src.replace(args.str_src, args.str_dst)
if args.cp:
filename = file_path + "/" + file
else:
filename = file_path + "/" + file
f = open(filename, 'w')
f.write(dst)
f.close()
# python easyreplace.py [対象とするディレクトリ] [置換する対象文字列] [置換後の文字列] [-r] [-c]
# -r :オプション 対象文字列を正規表現で記述
# -c :オプション 別名で保存(頭に_を付けます)
if __name__ == "__main__":
main()
3. 1と2が出来たら、「str_replace.bat」をダブルクリックすれば、置換が自動で行われます。