特定ファイルを一箇所に集める
下のような構成でファイルを作ったと考えてくださいませ。
この時に、銀座の請求書と明細書を一箇所に集めて欲しい、という要求があったとした場合のプログラムを、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