実現したいこと
「該当のソースコード」はtxtディレクトリが存在しないときは正しく動作します。すでにtxtディレクトリが存在して、その中にファイル(例えば1.txt)が存在するときに上書きするようにしたいです。ファイルの数は大量なので、globを使おうと思いました。色々ネットで調べましたが、よく分からないので教えてください。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "〇〇〇\testCV114-3.py", line 11, in <module> shutil.move(str(i), str(new_folder)) File "〇〇〇\Lib\shutil.py", line 884, in move raise Error("Destination path '%s' already exists" % real_dst) shutil.Error: Destination path 'txt\1.txt' already exists
該当のソースコード
こちらを参考にしました。
python
1import shutil 2import glob 3 4new_folder = 'txt' 5if not os.path.exists(new_folder): 6 os.mkdir(new_folder) 7 8files = glob.glob('*.txt') 9 10for i in files: 11 shutil.move(str(i), str(new_folder))
試したこと
「該当のソースコード」の3行目に以下の部分を入れると実現できますが、後でtxtoldというディレクトリを手動で消去する必要があります。もっときれいに実現するやり方があると思って質問させていただきました。
python
1import os 2oldpath = './txt' 3newpath = './txtold' 4os.rename(oldpath, newpath)
解決済みですが、
shutil.move(ファイル名, ディレクトリ名)
ではなく
shutil.move(ファイル名, ディレクトリ名 + '/' + ファイル名)
にしたら上書きされると思います。(os.path.join のほうがいいかもしれません)
>bsdfan様
コメントありがとうございます。
今回はglobを使ってのやり方が分からなかったので質問させていただきました。
globは無関係で、shutil.move は第二引数がファイル名のときと、ディレクトリ名の時で動作が変わるので、上のコメントをしました。
shutil.move(str(i), str(new_folder))
を
shutil.move(i, new_folder + '/' + i)
にすればいいのでは、ということです。
できました。
どうもありがとうございました。

回答2件
あなたの回答
tips
プレビュー