はじめに
欲しいと思ったファイルを会社の共有フォルダから見つけ出すことは時間がかかってしまう。
共有フォルダは自分が欲しいファイル以外にも多くのファイルが存在するからだ。
また、フォルダでのファイル検索機能だとファイルが多すぎて時間がかかりすぎてしまう。
今回は必要な名前を持つファイルをすべて自分のデスクトップのフォルダにコピーしてくることを目標とする。
環境
python 3.7.8
window 10
構成
┃
┣━━ 共有フォルダ/
┃ ┗━━━━ Delta/
┃ ┗━━━━ CBA001/
┃ ┗━━━━ CBA001.xlxs
┃ ┗━━━━ Oil/
┃ ┣━━━━ CBA001 30'.xlxs
┃ ┗━━━━ CBA001.xlxs
┃ ┗━━━━ 成分調査/
┃ ┣━━━━ CBA001 in Water.xlxs
┃ ┗━━━━ CBA001.xlxs
┃ ┗━━━━ 強度/
┃ ┣━━━━ CBA001-007 200h.xlxs
┃ ┗━━━━ CBA001-007.xlxs
データはすべて通し番号で管理され、今回必要なデータはCBA001
のようになっている。
共有フォルダ内はデータの種類ごとに保管される。
条件
-
コピーした後のファイル名を、ファイルの上位フォルダ名(項目名で)で区分することで重複を防ぐ。
-
Dletaフォルダのように、フォルダのフォルダ内に存在するファイルもコピーすること。
Code
import os
import glob
import shutil
target_name = input('ファイル名を入力してください。: ')
dir_data = os.path.expanduser('~/Desktop') + fr'\{target_name} Data'
os.makedirs(dir_data, exist_ok=True)
# デスクトップにフォルダを作る。
file_share_path = rf'C:\Users\junsa\Desktop\共有フォルダ\**\*{target_name}*.xlsx'
list = glob.glob(file_share_path, recursive=True)
# サブフォルダを含めて再帰的にファイルを探索する
for file in list:
Copyfile(file)
def CopyFile(file_target: str):
dir_share = r'C:\Users\junsa\Desktop\共有フォルダ'
dir_list = os.listdir(self.dir_share)
print(dir_list)
#['Delta', 'Oil', '強度', '成分検査']
#上位フォルダ名をつけて保存する。
for dir_name in dir_list:
if dir_name in file_target:
shutil.copy2(file_target, dir_data + fr'\{dir_name} {os.path.basename(file_target)}')
結果
まとめ
上位フォルダ名をつけることによってファイル名の重複を防ぎ、ファイルをすべて保存することができる。
os
やglob
の組み合わせでフォルダ内のファイルのほとんどを条件付きで探すことができる。
必要な時だけファイルをコピーして不必要になったら消したらいいので、デスクトップ画面をきれいに保つことができ、ファイルを探す手間が減ります。
過去の投稿