Make it possible with Python.

最近Pythonから離れ気味、その他物作りに寄り気味です。

ファイル名とファイル内テキストを置換するpythonスクリプト

※追記:テキスト置換スクリプトはリンク先に改善版を掲載しています。 上記リンク先スクリプトをご使用ください。

python.slightlysimple.net

※以下は改善前のスクリプトです。ご注意ください。

定期的に以下のような作業が必要になったので、ツールを作ってみました。

  • 30個以上のテキストファイルのファイル名の一部を置換する
  • 上記テキストファイル内の文字列も、一部を置換する
  • 置換する文字列は全ファイル共通
  • テキストファイルの文字コードはShift_JIS

pythonというか、プログラミングに触れるのは初めてで、python3をインストールするところから始めました。

プログラミング経験はほぼ皆無の状態から、いろいろコピペしつつも、3時間で下記コードが書けました。

python、わかりやすいかもしれない。

# coding: UTF-8
import sys
import os
import re
#文字コード指定に必要
import codecs

#置換文字列を指定
name_old='v001' #この文字を含むファイルを操作+ファイル名の置換元文字列
name_new='v002' #ファイル名の置換後文字列
txt_old='v001' #ファイル内の置換元 文字列
txt_new='v002a' #ファイル内の置換後文字列

#パス指定小楽でスクリプト配置フォルダのファイル一覧取得
files = os.listdir()
for file in files:
    #まず.txtを含むファイルのみ読込
    txt = re.compile(".txt")
    if txt.search(file):
        # ファイル名の置換前後の文字列を指定
        file_new = file.replace(name_old,name_new)

        read_file = codecs.open(file, 'r', 'shift_jis')
        write_file = codecs.open(file_new, 'w', 'shift_jis')

        lines = read_file.readlines() #読み込み
        lines2 = []
        for line in lines:
            line = line.replace(txt_old,txt_new) #テキスト置換
            lines2.append(line) #別リストにする
        else:
            write_file.write(''.join(lines2)) #書き込み
            read_file.close()

#       os.rename(file, file_new)
    else:
        pass