[Python] 久しぶりにpythonスクリプトを作成した。[ファイル区分けスクリプト]
概要
About
ストレージから移したファイル区分けのために久しぶりにPythonスクリプトを組んだ。
忘備録ついでに記したい。
Pythonは自由度が高いし
IDEでの補完機能が弱い(動的型付けなので仕方ないが)ことを除けば、
扱っていて楽しい言語だと思う。
環境
- Windows10
- Python 3.7.3
用途
10000個程度ある画像ファイルを名前順でソートして別のフォルダにコピーする。
移す際にサブフォルダを作成し、数百個ずつくらいの組にして仕分けする。
各画像ファイルのファイル名が1.jpg~12000.jpg(.png or .mov)などで規則的だったので
名前順でソートすることにした。
コード
1# FileName:fileSorting.py
2import glob
3import os
4import shutil
5from win10toast import ToastNotifier
6
7
8def Main():
9 isSuccess = True
10
11 try:
12 mySrcPath = r"C:\tmp\20210211\src"
13 myDestpath = r"C:\tmp\20210211\dst"
14 movedFileList = []
15
16 # 指定フォルダ直下のすべてのファイルをListに取得
17 # ファイルの名前(6桁ゼロ埋め)でソート
18 if os.path.isdir(mySrcPath):
19 for file in sorted(
20 glob.glob(mySrcPath + '\\*', recursive=False),
21 key=lambda my_file: os.path.splitext(os.path.basename(my_file))[0].zfill(6)
22 ):
23
24 if os.path.isfile(file):
25 movedFileList.append(file)
26 else:
27 print('No Directory')
28 exit(0)
29
30 currentDirNum = 1
31 # 200個ずつ区分け
32 bundleNum = 200
33 imgNum = len(movedFileList)
34 stt = 1
35 end = 0
36
37 # currentDirNumの番号通りの名前のサブフォルダを作成し、bundleNum個ずつファイルをコピーして格納する
38 while imgNum >= bundleNum:
39 end += bundleNum
40 newList = movedFileList[stt - 1:end]
41 stt += bundleNum
42 dst = myDestpath + "\\" + str(currentDirNum)
43 os.makedirs(dst)
44 currentDirNum += 1
45 # # 指定出力先フォルダにコピー
46 [shutil.copy2(os.path.abspath(file2), dst) for file2 in newList]
47 imgNum -= bundleNum
48 # 残余分のファイルをコピー
49 newList = movedFileList[end:]
50 if newList:
51 dst = myDestpath + "\\" + str(currentDirNum)
52 os.makedirs(dst)
53 [shutil.copy2(os.path.abspath(file2), dst) for file2 in newList]
54
55 except:
56 isSuccess = False
57
58 finally:
59 toast = ToastNotifier()
60 if isSuccess:
61 toast.show_toast("処理完了",
62 "ファイルまとめが完了しました。",
63 icon_path=None,
64 duration=2,
65 threaded=True)
66 else:
67 toast.show_toast("処理エラー",
68 "正常に終了しませんでした。",
69 icon_path=None,
70 duration=2,
71 threaded=True)
72
73
74if __name__ == '__main__':
75 Main()
76