特定ファイルを一箇所に集める

下のような構成でファイルを作ったと考えてくださいませ。

この時に、銀座の請求書と明細書を一箇所に集めて欲しい、という要求があったとした場合のプログラムを、Windows+Pythonで作ってみました。
最初からそのようなシステムを作っておけよ、というのは無しです。

\串揚げリスボア
    |-請求書.pdf
    |-請求明細書.pdf
\バーあけみ
    |-請求書.pdf
    |-請求明細書.pdf
\立ち飲み太郎
    |-請求書.pdf
    |-請求明細書.pdf
\グループ_銀座の居酒屋
    |-請求書.pdf
    |-請求明細書.pdf
\グループ_銀座のバー
    |-請求書.pdf
    |-請求明細書.pdf
\グループ_渋谷の居酒屋
    |-請求書.pdf
    |-請求明細書.pdf
\グループ_渋谷のバー
    |-請求書.pdf
    |-請求明細書.pdf

実行条件としては、実行ファイルと同じフォルダにnot_list.txtというファイルを作って、その中に集めないフォルダ名を書いておきます。

not_list.txtの中身は、以下になります。

グループ_渋谷の居酒屋
グループ_渋谷のバー

ということで、Pythonで作ったプログラムのソースが以下になります。

# -*- coding: utf-8 -*-
#"""
#Created on Mon Oct  4 11:12:51 2021
#@author: deisui
#指定されたフォルダの請求書を一箇所に集める
#その時、not_list.txtに記入されているフォルダのファイルは集めない
# GUIで行うこと
#  分類するフォルダを指定
#  集約ボタンクリックで作業開始
#  終了またはエラーのポップアップ
# 具体的な作業内容
#  not_list.txtの内容を読み込む
#  指定されたフォルダ内のグループフォルダを探す
#  not_list.txtに含まれていないフォルダのファイルを特定のフォルダにコピーする
#  そのときのファイル名は、元ファイル名_グループ名とする
#"""
import PySimpleGUI as sg
import os
import sys
import glob
import shutil
# not_list.txtがあるかどうか確かめて無かったりしたら終了
try:
   fin = open('not_list.txt','r')
except FileNotFoundError:
   sg.popup('プログラムと同じフォルダにnot_list.txtが必要',title='注意!!')
   sys.exit()
except Exception() as other:
   sg.popup('なんか知らんがエラーですぜ ',other,title='注意!!')
   sys.exit()
   
# 1行ずつ読んで集合にする
# 改行を取らねばならない
duml0 = fin.readlines()
duml1 = []
for dd in duml0:
   duml1.append(dd.strip())
not_list = set(duml1)
fin.close()
# Windows Layout
layout = [  [sg.T('分類したいフォルダを選択')],
           [sg.In(key='-IN-'),sg.FolderBrowse(target='-IN-',key='folder')],
           [sg.Button('集約',key='go')]  ]
# Make Windows Title=銀座グループ集約
window = sg.Window('銀座グループ集約', layout)    
# Main loop
while True:
   event, values = window.read()
   
   # これがないと無限ループになります
   if event == sg.WIN_CLOSED: #ウィンドウのXボタンを押したときの処理
       break
   
   # 集約ボタンが押された場合
   if event == 'go':
       # 作業フォルダとグループフォルダを定義
       work_folder = values['folder']
       group_list = []
       # 全フォルダをリストにする
       all_dir = os.listdir(work_folder)
       # フォルダ名にグループが入ってるか調べる
       for all_name in all_dir:
           # フォルダ名が'グループ'で始まってたらリストに追加
         if all_name.find('グループ') == 0:
             group_list.append(all_name)
       # print(group_list)
       # 集約用フォルダを作る
       g_folder = work_folder+'/銀座集めた'
       # フォルダがあったら中のファイルを削除する
       if os.path.exists(g_folder):
           rm_files = glob.glob(g_folder + '/*')
           for file in rm_files:
               os.remove(file)
       # フォルダが無ければ作成
       else:
           os.mkdir(g_folder)
       # copy pdf
       for gf in group_list:
           # not_list集合に入っていない場合にコピー
           if not(gf in not_list):
               shutil.copy(work_folder+'/'+gf+'/請求書.pdf',g_folder+'/'+'請求書_'+gf.split('_')[1]+'.pdf')
               shutil.copy(work_folder+'/'+gf+'/請求明細書.pdf',g_folder+'/'+'請求明細書_'+gf.split('_')[1]+'.pdf')
       # 終了のポップアップを表示して終了
       sg.popup('コピー終了',title='完了')
       window.close() 
window.close()

実行すると、以下のようなフォルダが作成されます。

\銀座集めた
|-請求書_銀座の居酒屋.pdf
|-請求明細書_銀座の居酒屋.pdf
|-請求書_銀座のバー.pdf
|-請求明細書_銀座のバー.pdf