Q&A
前提
あるディレクトリにファイルが複数入っています。
例)0123456-01製品.xlsx,0123456-01図面.pdf, 1234546-a0製品.xlsx,123456-a0図面.pdfというように
数字7桁-[0-9a-z]{2}のパターンに製品と図面が複数入っているディレクトリがあります。
このディレクトリに、数字7桁-[0-9a-z]{2}+’sample'というディレクトリを作り、共通するファイルを入れていきたいです。
上記の例でいうと
0123456-01sample-0123456-01製品.xlsx,0123456-01図面.pdf
1234546-a0sample-1234546-a0製品.xlsx,123456-a0図面.pdf
が入る形になります。
うまくいかないので、どうすればよいでyそうか?
実現したいこと
ここに実現したいことを箇条書きで書いてください。
- ▲▲機能を動作するようにする
発生している問題・エラーメッセージ
ディレクトリは作られるのですが、ファイルが入りません。
python
1 2 3#ディレクトリ作成 4 5def make_target_dir(filelists): 6 for file in filelists: 7 filepath = os.path.split(file)[0] 8 basename = os.path.split(file)[1] 9 name,ext = os.path.splitext(basename) 10 foldername = re.search(r'[0-9]{7}-[0-9A-z]{2}',name).group() 11 new_folder_path = os.path.join(filepath,foldername+'sample') 12 if not os.path.exists(new_folder_path): 13 os.makedirs(new_folder_path) 14 15#ディレクトリとファイルを判定 16def filter_dir(filelists): 17 dir_ = [] 18 for file in filelists: 19 if os.path.isdir(file): 20 dir_.append(file) 21 return dir_ 22 23def filter_file(filelists): 24 filelist = [] 25 for file in dirs: 26 if os.path.isfile(file): 27 filelist.append(file) 28 return filelist 29 30 31 32#同じディレクトリにあるものをフォルダ名とファイル名が一致したらフォルダに入れる 33def insert_file(dirs,filelist): 34 for target_dir in dirs: 35 basename = os.path.basename(target_dir) 36 basename_code = re.match(r'[0-9]{7}-[a-z0-9]{2}',basename).group() 37 for file in filelist: 38 if re.search(r'[0-9]{7}-[a-z0-9]{2}',file).group() in basename_code: 39 shutil.move(file,target_dir) 40 41if __name__ == '__main__': 42 file_path_lists =glob.glob(r'ファイルパス/*') 43 make_target_dir(file_path_lists) 44 dirs = filter_dir(file_path_lists) 45 filelist =filter_dir(dirs) 46 insert_file(dirs,filelist) 47
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/04/22 01:09