Bu soru daha önce sorulmuştur, ancak bulduklarım sayesinde tam olarak istediğimi elde edemiyorum . Bir klasördeki tüm dosyaları ve dizinleri kaldırır ancak üst klasörü kendisi:Python, bir dizindeki dosyaları veya klasörleri yinelemeli olarak kaldırır, ancak üst dizini veya belirli bir klasörü değil
This question kullanıcı amaçlandığı gibi tam işliyor bu kodu verir nerede, bir answer by user Iker sahiptir.
Bunu, üst dizinden değil, üst dizinden tüm dosyaları silerek ve bu dizindeki bir klasörü dışarıda bırakmak istiyorum.
kullanıyorum kodudur:
eğer dosyalar =
tutmak:
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))
Bir açıklamada "için" sonra ifadesi temelde diyor "Eğer" ekleyerek denedim ve ana dosyadaki "keep" adlı bir klasöre işaret eden bir "keep" değişkenine sahibim; böylece bu betik, ana dizin ve ana öğe içinde "keep" adı verilen dizin dışında kalan her şeyi siler. Ancak, bunu ekledikten sonra kod çalışmaz. İşte
kodu bozulursa ifadesiyle, ben tam kodudur: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))
ben çok açıktır yapıyorum eminim, ama o kadar, bana açık değildir herhangi bir yardım takdir edilecektir.
Teşekkürler!
DÜZENLEME: Ben'in cevap dayanarak aşağıda, burada benim için çalıştı kodu: Ben eşitlik kontrol etmem
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
Teşekkürler! Bu harika çalıştı. Soruyu, cevabınıza dayalı olarak çalışan kod ile güncelliyorum. – redjax