Python ファイル操作の覚え書き (os, pathlib, shutilライブラリ)
Python ファイル操作の覚え書き (os, pathlib, shutilライブラリ)
- ファイル名に指定の接頭辞をつけてコピー shutil.copy()
- ディレクトリーごとまるっとコピー、ただし除外ファイルあり shutil.copytree()
- ディレクトリーごとまるっと移動 shutil.move()
ファイル名に指定の接頭辞をつけてコピー shutil.copy()
# ./SampleData配下の全ファイルを検索し、同じ階層に接頭語をつけた名前でコピーする # shutil.copy() ファイルコピー from pathlib import Path import shutil pth = Path('./SampleData') prefix = input('input prefix: ') for f in pth.glob('**/*'): if not f.is_dir(): # ディレクトリは除外 dst_f = f.parent / Path(prefix+f.name) shutil.copy(f, dst_f) # ファイルコピー print(f"{f} --> {dst_f}") # 進行確認用 """ 実行結果 # input prefix: _ # SampleData/20181010_field.jpg --> SampleData/_20181010_field.jpg # SampleData/.DS_Store --> SampleData/_.DS_Store # SampleData/plan715401.docx --> SampleData/_plan715401.docx # SampleData/test20181010.csv --> SampleData/_test20181010.csv # SampleData/test20181120.txt --> SampleData/_test20181120.txt # SampleData/plan501201.xlsx --> SampleData/_plan501201.xlsx # SampleData/sub_dir/plan715401.docx --> SampleData/sub_dir/_plan715401.docx # SampleData/sub_dir/plan501201.xlsx --> SampleData/sub_dir/_plan501201.xlsx """
ディレクトリーごとまるっとコピー、ただし除外ファイルあり shutil.copytree()
# ディレクトリツリーごとまるっとコピーする(ただし.DS_Storeとワードファイルは除外) # shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False) from pathlib import Path import shutil src = Path('./SampleData') # shutil.copytree のパラメータで使うだけなら src = './SampleData' でも機能する dst = Path('./SampleData_copied') # shutil.copytree のパラメータで使うだけなら dst = './SampleData' でも機能する path = shutil.copytree(src, dst, ignore=shutil.ignore_patterns('*.docx', '.DS_Store'), dirs_exist_ok=True)
ディレクトリーごとまるっと移動 shutil.move()
# ディレクトリツリーごとまるっと移動する # shutil.move(src, dst, copy_function=copy2) from pathlib import Path import shutil import sys src = Path('./SampleData') dst = Path('./SampleData_moved') if not src.exists(): print(f"{src.name}が存在しません") sys.exit() if dst.exists(): print(f"既に{dst.name}が存在します") sys.exit() shutil.move(src, dst) """ 実行結果 # 正常系 # PosixPath('SampleData_moved') shutil.move()の返値 # 異常系1 - srcディレクトリなし # SampleDataが存在しません # An exception has occurred, use %tb to see the full traceback. # SystemExit # 異常系2 - dstディレクトリ重複 # 既にSampleData_movedが存在します # An exception has occurred, use %tb to see the full traceback. # SystemExit """