迷走ブログ

ファウスト的衝動を抱き、迷走している、凡人による気まぐれブログです。

【python】プログラミング初心者が面倒くさい事務作業をpythonにやらせた話ーーファイルのコピーとファイル名の一括変更

はじめに

f:id:yktmmrmtoosa03:20210916013750j:plain
この物語は、転職後あまりにも会議・事務作業が多すぎることで辟易している主人公がpythonを用いて事務作業を効率化するまでの物語である。

ある日のこと、主人公は専門性が全く活かされない業務を任された。
A:「(過去とこれから行う会議の)ファイルを作成してほしいです」
主人公:「え?(前々前世、全然前職で培った専門性が活かされないけれど・・・俺に任せるお仕事なのか???)」
A:「よろしくお願いします」
主人公:「・・・」

そして始まる無駄?とまでは言わないが、非効率な事務作業。
前職がどれほど効率化されていたかを思い知る日々の仕事。
思い描いた業務からは程遠いと感じる毎日。。。。。
疲れ切った心。。。。。

主人公の耳元で誰かが囁いたのだ。
「あるがままに、なすがままに。pythonに任せよ」と。
(このとき、すでに主人公は幻聴に囚われていたのかもしれない)

この物語はフィクションです。実在の人物、団体及び名称とは一切関係ございません。

問題の所在について

f:id:yktmmrmtoosa03:20210916013807j:plain
今回は、既存のテキストファイル(ここでは雛形もどき)が用意されており、そのテキストファイルをコピーし複製する、その複製したファイルの名を個別個別に変更する必要がありました。どう言うことかというと、ファイル名だけ変更して、ファイルの中身はほぼ同じものを用意してほしいということだったのです。
ちなみに「ほぼ」と表現したのには意味があります。
それは、ファイルの中身を書き足すためには、別の作業が必要なのですが、それはどう考えても現在の仕事手順ですと手作業を入れないと、自動化できないため、そのように表現しました。また、時間等の制約もあり、一度に自動化できない以上、諦めました。(詳細は省きます)

pythonで行ったこと

f:id:yktmmrmtoosa03:20210916013834j:plain
今回は主に以下のことをした。

  • 既存のファイル(雛形もどき)の中身を必要な数だけ複製
  • 複製したファイルの名をそれぞれ適した名前に変更
  • 複製したファイルの中身にフッターの追加

現在の僕のレベルでは1度で全てをうまく処理できないため、2ステップで進めました。

1.既存のファイルの複製と複製したファイルの名前を変更

import shutil
# ファイル名のリスト
headquarters = ['本部','A事業部','B本部','C部','D','E','F','G']
for i in range(len(headquarters)):
# ファイルを複製し、名前を変更する
new_file = shutil.copy('テスト.txt','2021年{}用.txt'.format(headquarters[i]))

1.の解説

まず、shutilと言うモジュールを呼び出しています。
これはファイル操作を行うためのものになります。

次に、ファイル名を変更する際に使用するためのリストを作っています。
そして、上記のリストもとにして、リスト内の個数分for文で繰り返し処理をします。そうすることで、リスト内の個数分のファイルのコピー作成しています。

その際、format関数によって、リストの要素=i=変数をファイル名である文字列部分に埋め込むことで、それぞれのファイル名としています。

2.複製したファイル内にフッター要素を追加

import glob
data = [] * len(f)
# 複製したファイル名の取得
f = glob.glob('2021年*.txt')
for ii in f:
    with open(ii,'a',encoding='utf-8') as ff:
        # 開いたファイルにフッターを書き込む
        data= ff.write('\n'+('-'*50)+'\n日付:') 

2.の解説

ここではまず、globモジュールと呼ばれるものを呼び出しています。
これはディレクトリ内にあるファイル名を取得するために用います。
今回は、先ほど複製したテキストファイルの名前を取得するように、「2021年〇〇.txt」というものを指定しています。

次に、for文にて繰り返し処理をしています。
何を繰り返しているのかと言うと、上述のファイル名からそれぞれのファイルを書き込み可能な状態にしています。そのためには、open()関数で、「"a"ppend」を呼び出します。aは追記するためのモードになります。

最後に、フッター要素を書き込みます。

おわりに

主人公は夢と希望を胸に抱いて、日々雑務をこなすのである。
俺(たち)の戦いはこれからだ!!!!!