🙆

置換がめんどくさい(pythonで一定期間ごとに日付を変えて置換して新しくファイルを作成する(作業記録ファイル作成))

2023/02/28に公開

概要
pythonを用いて一定期間ごとに日付を変更した置換ファイルを大量に作成する方法、コード
背景
業務にて、8日ごとに期間は変えなければならないが似たようなtxtファイルを3,4ヶ月間分作成しなければならず、フォーマットをダウンロードして、置換する作業を何回もするのは無駄だと感じたので。
方法
pythonのコードで
・会話形式で開始日と終了日をstartday, enddayと定義
・ファイルの中のyyyymmddを作成日に、yyyy-mm-ddとxxxx-mm-ddを開始日から8日ごとで区切った区間での開始日と終了日に置換したファイルを作成
以上のようなコードのようになる。
ポイントとしては

・datetimeを用いて日付を柔軟に変化させてファイルを量産
・with openなどを用いてフォーマットファイルを読み込み、書き込んだ新しいファイルを作成
・replace(置換対象文字列、置換後文字列、置換回数)で置換したい数だけ置換させる

を利用して作成した。


"""
日付を特定の日付に置換したファイルを作成するコード
8日ごとの置換を大量にする時間がもったいないと感じたため
"""

import datetime
import os

# 開始日と終了日、実行日を入力
startday = "2022-03-18"
endday = "2022-04-27"
makeday = datetime.datetime.now().strftime("%Y-%m-%d")

# 開始日と終了日をdatetime型に変換
start_date = datetime.datetime.strptime(startday, '%Y-%m-%d')
end_date = datetime.datetime.strptime(endday, '%Y-%m-%d')

while start_date >= end_date:
    # # ファイルの読み込み
    # with open("../../../Desktop/recovery_rvc52/test.txt", "r") as file:
    #     content = file.read()
    # ログファイル
    with open("../../../Desktop/recovery_rvc52/2023-XX-XX_リカバリ作業_ログ取得_yyyymmdd_yyyymmdd.txt", "r") as file:
    # with open("../../../Desktop/recovery_rvc52/2023-XX-XX_リカバリ作業_ログ投入_yyyymmdd_yyyymmdd.txt", "r") as file:
    # with open("../../../Desktop/recovery_rvc52/2023-XX-XX_リカバリ作業_日次集計_yyyymmdd_yyyymmdd.txt", "r") as file:
        content = file.read()
    interval_start = start_date.strftime('%Y-%m-%d')
    interval_end = (start_date - datetime.timedelta(days=7)).strftime('%Y-%m-%d')
    current_date = interval_start
    while current_date >= interval_end:
        # 日付をyyyy-mm-dd形式にフォーマット
        formatted_date = datetime.datetime.strptime(current_date, '%Y-%m-%d').strftime('%Y-%m-%d')
        # 文字列の置換
        content = content.replace("zzzz-mm-dd", formatted_date, 1)
        # 日付を1日進める
        current_date = (datetime.datetime.strptime(current_date, '%Y-%m-%d') + datetime.timedelta(days=1)).strftime("%Y-%m-%d")
    # 作成日を置換
    content = content.replace("yyyymmdd", makeday)
    # 開始日と終了日を置換
    content = content.replace("xxxx-mm-dd", interval_start)
    content = content.replace("yyyy-mm-dd", interval_end)



    # 新しいフォルダを作成
    if not os.path.exists("../../../Desktop/recovery/"+makeday+"_作業記録未実施"):
        os.makedirs("../../../Desktop/recovery/"+makeday+"_作業記録未実施")
    # C:\Users\test\Desktopに新しいファイルを作成し、そこに書き込む
    with open("../../../Desktop/recovery_rvc52/"+makeday+"_作業記録未実施/"+makeday+"_リカバリ作業_ログ取得_"+interval_end+"_"+interval_start+".txt", "w") as file:
        file.write(content)
    start_date -= datetime.timedelta(days=8)
    makeday = (datetime.datetime.strptime(makeday, '%Y-%m-%d') + datetime.timedelta(days=1)).strftime("%Y-%m-%d")

結論
さくらエディタなどで置換しながらファイルを手作業で作成するのもいいが、自動で作成する方が変更が出ても融通が効くし、何より生産性の少ない作業は面倒なのでコードで量産した方が良いと感じた笑。

株式会社アクティブコア

Discussion