このタイプの質問は以前に尋ねられましたが、 。それはすべてのファイルとディレクトリのフォルダからではなく、親フォルダ自体を削除します。Pythonはディレクトリ内のファイルやフォルダを再帰的に削除しますが、親ディレクトリや特定のフォルダは削除しません。
This questionは、ユーザーがが意図したとおりに作業を行うというコードを与えるところ、answer by user Ikerを持っています。
親ディレクトリからすべてのファイルを削除し、親ディレクトリではなく、ディレクトリ内のフォルダを除外したい場合は、これをさらに調整する必要があります。私は基本的に言う声明「の」後「であれば」文の追加しようとしている
import os
import shutil
files = '[the path to my folder]'
for root, dirs, files in os.walk(files):
for f in files:
os.unlink(os.path.join(root, f))
for d in dirs:
shutil.rmtree(os.path.join(root, d))
::!
ファイル場合を=
を保つ
私が使用しているコードがあります親ファイル内の "keep"という名前の変数を "keep"に設定すると、このスクリプトは親ディレクトリ以外のすべてを削除し、親ディレクトリ内の "keep"というディレクトリを削除します。しかし、それを加えた後、コードは機能しません。ここで
は私が持っていた正確なコードは、コードを壊しif文で、次のとおりです。私は私がやっていると確信している
import os
import shutil
files = '[the path to the parent folder'
keep = '[the path to the "keep" folder]'
for root, dirs, files in os.walk(files):
for f in files:
if files != keep:
os.unlink(os.path.join(root, f))
for d in dirs:
if files != keep:
shutil.rmtree(os.path.join(root, d))
ので、非常に明白ですが、それは私には明らかにされていませんどんな助けもありがとう。
ありがとうございます!
EDIT:以下ベンの答えに基づいて、ここに私のために働いていたコードは次のとおりです。
import os
import shutil
root_dir = r'[path to directory]' # Directory to scan/delete
keep = 'keep' # name of file in directory to not be deleted
for root, dirs, files in os.walk(root_dir):
for name in files:
# make sure what you want to keep isn't in the full filename
if (keep not in root and keep not in name):
os.unlink(os.path.join(root, name)) # Deletes files not in 'keep' folder
for name in dirs:
if (keep not in root and keep not in name):
shutil.rmtree(os.path.join(root, name)) # Deletes directories not in 'keep' folder
ありがとうございました!それは素晴らしい仕事でした。あなたの答えに基づいて動作するコードで質問を更新しています。 – redjax