# '20/02/29更新:コードの可読性を良くしました。
本記事のデータ処理内容を示します。例えば、下図のようにフォルダが複数あり、各フォルダにはデータファイルが格納されている。ちなみに、本プログラムは「pgm.py」で保存場所はどこでも構わない。
例えば「D:\python\日付\test\dataA」の中には複数の種類の拡張子のファイルが多数ある(下図)。
本プログラムを実行すると、例えば、拡張子jpgのみを下図のようにフォルダ「D:\python\日付\data_190501\dir_jpg\dataA」へコピーする。
本プログラムの実行例を示す。
例:$ python pgm.py jpg ./dataA
引数は二つあり、一つ目に抽出したいファイルの拡張子、二つ目に抽出したいフォルダパスを指定する。下図は実行例4つです。コピー先フォルダがすでに存在する場合は上書きしない仕様(下図4つ目)。
▼本プログラム
コピー先親フォルダ名と場所を変更したい場合は、下から4行目にある「new_dirpath」に指定すれば良い。
import sys, os
import shutil
import datetime
now = datetime.datetime.now()
now = now.strftime("%y%m%d")
def check_dir(new_dirpath, check_file):
if os.path.isdir(new_dirpath):
pass
else:
os.mkdir(new_dirpath)
new_sub_dirpath_list = [new_dirpath, 'dir_' + check_file]
new_sub_dirpath = os.path.join(*new_sub_dirpath_list)
if os.path.isdir(new_sub_dirpath):
print(new_sub_dirpath + " already exists")
exit("exit")
else:
os.mkdir(new_sub_dirpath)
return new_sub_dirpath
def copy_files(check_dirpath, check_file, new_sub_dirpath):
if not os.path.isdir(check_dirpath):
print("not found " + check_dirpath)
exit("exit")
else:
for dirpath, dirnames, filenames in os.walk(check_dirpath):
for file in filenames:
filepath = os.path.join(dirpath, file)
if file.endswith(check_file):
shutil.copy2(filepath, new_sub_dirpath)
new_file_path = os.path.join(new_sub_dirpath, file)
print("copied -> ", new_file_path)
def main():
new_sub_dirpath = check_dir(new_dirpath, check_file)
copy_files(check_dirpath, check_file, new_sub_dirpath)
if __name__ == '__main__':
check_file = sys.argv[1]
check_dirpath = sys.argv[2]
new_dirpath = "../data_" + now
main()
以上