Jeśli pracujesz z bardzo dużym katalogiem, a zwłaszcza katalogiem sieciowym w systemie Windows, i możesz kontrolować środowisko, w którym ten program działa, warto skorzystać z funkcji „os.scandir (folder)” Py3.5 zamiast listdir. Następnie składnia jest zupełnie inna, ale dość prosta do wdrożenia; chętnie go opublikuję, jeśli inni będą chcieli.
Michael Scott Cuthbert
Dostaję ostrzeżenie pylint z except Exception as e:tymi odczytami W0703: Catching too general exception Exception. Czy jest jakiś konkretniejszy wyjątek do złapania, czy powinienem go zignorować?
John Hany
7
@JohnHany, wierzę, że chcesz złapać OSError.
MikeB,
246
Możesz po prostu to zrobić:
import os
import glob
files = glob.glob('/YOUR/PATH/*')for f in files:
os.remove(f)
Oczywiście możesz użyć innego filtra w swojej ścieżce, na przykład: /YOU/PATH/*.txt do usunięcia wszystkich plików tekstowych z katalogu.
Usuń całe drzewo katalogów; ścieżka musi wskazywać na katalog (ale nie symboliczne łącze do katalogu). Jeśli parametr ignore_errors ma wartość true, błędy wynikające z nieudanych operacji usuwania zostaną zignorowane; w przypadku fałszu lub pominięcia, takie błędy są obsługiwane przez wywołanie procedury obsługi określonej przez onerror lub, jeśli zostanie pominięte, zgłoszą wyjątek.
Spowoduje to nie tylko usunięcie zawartości, ale także samego folderu. Nie sądzę, że o to pyta pytanie.
Iker Jimenez
3
Myślę, że to dobra odpowiedź. Dlaczego po prostu nie usuniesz zawartości i folderu, a następnie ponownie utworzysz folder?
cssndrx,
42
Ponieważ nowy katalog i stary nie będą takie same. Więc jeśli jakiś program siedzi w katalogu i czeka na rzeczy, dywan zostanie wyciągnięty spod niego.
Mike Cooper
30
Po prostu utwórz ponownie katalog po rmtree. Jakos.makedirs(dir)
Iulius Curt
3
@IuliusCurt nie, mam katalog zamontowany w pamięci RAM, muszę go opróżnić i niestety nie mogę go po prostu usunąć, a następnie utworzyć ponownie:OSError: [Errno 16] Device or resource busy
Arnaud P
80
Rozwijając odpowiedź mhawke, właśnie to zaimplementowałem. Usuwa całą zawartość folderu, ale nie sam folder. Testowany w systemie Linux z plikami, folderami i dowiązaniami symbolicznymi powinien również działać w systemie Windows.
import os
import shutil
for root, dirs, files in os.walk('/path/to/folder'):for f in files:
os.unlink(os.path.join(root, f))for d in dirs:
shutil.rmtree(os.path.join(root, d))
Dlaczego „chodzić”, a nie tylko wyświetlać zawartość folderów?
Don
2
To poprawna odpowiedź, jeśli chcesz również usunąć katalogi. walksłuży do podziału katalogów na pliki, które muszą być obsługiwane w inny sposób. Możesz także użyć os.listdir, ale musisz ręcznie sprawdzić, czy każdy wpis jest katalogiem lub plikiem.
dkamins
7
Jest blisko, ale zarówno os.walk, jak i shutil.rmtree są rekurencyjne. os.walk jest niepotrzebny, ponieważ do wyczyszczenia potrzebujesz tylko plików i katalogów na najwyższym poziomie w katalogu. Wystarczy użyć instrukcji if na elementach w os.listdir, aby sprawdzić, czy każdy z nich jest plikiem czy katalogiem. Następnie użyj odpowiednio remove / unlink i rmtree.
Matthew Alpert
1
@MatthewAlpert Zauważ jednak, że os.walktutaj się nie powtórzy, ponieważ zwraca generator, tylko rekurencyjnie przegląda podkatalogi, gdy próbujesz go rozwinąć, a do czasu pierwszej iteracji tej pętli nie ma podkatalogów pozostawiony do obejrzenia. Zasadniczo os.walkjest tutaj używany jako alternatywny sposób odróżnienia folderów najwyższego poziomu od plików najwyższego poziomu; rekurencja nie jest używana i nie ponosimy za nią kosztów wydajności. Jest to jednak ekscentryczne i zgadzam się, że proponowane przez ciebie podejście jest lepsze po prostu dlatego, że jest bardziej wyraźne i czytelne.
Mark Amery
47
Używanie rmtreei odtwarzanie folderu może działać, ale podczas usuwania i natychmiastowego odtwarzania folderów na dyskach sieciowych napotkałem błędy.
Proponowane rozwiązanie wykorzystujące walk nie działa, ponieważ służy rmtreedo usuwania folderów, a następnie może próbować użyć os.unlinkplików wcześniej znajdujących się w tych folderach. To powoduje błąd.
Opublikowane globrozwiązanie będzie również próbowało usunąć niepuste foldery, powodując błędy.
Twoje rozwiązanie spowoduje również błąd, jeśli istnieje dowiązanie symboliczne do innego katalogu.
Blueicefield,
@Blueicefield - Czy możesz podać przykład? Testowałem w systemie Linux przy użyciu pliku i folderu z dowiązaniem symbolicznym i nie byłem jeszcze w stanie spowodować błędu.
jgoeders
@jgoeders - Jeśli istnieje dowiązanie symboliczne do katalogu, os.path.isfile()powróci False(ponieważ następuje dowiązanie symboliczne), a w końcu wywołasz shutil.rmtree()dowiązanie symboliczne, które się podniesie OSError("Cannot call rmtree on a symbolic link").
Rockallite,
1
@Rockallite naprawione przez check to islink
kevinf
1
Ponadto: @kevinf słusznie wskazuje na potrzebę islinksprawdzenia tutaj, aby poprawnie obsługiwać dowiązania symboliczne do katalogów. Dodałem taki czek do zaakceptowanej odpowiedzi.
Mark Amery
20
To:
usuwa wszystkie dowiązania symboliczne
martwe linki
linki do katalogów
linki do plików
usuwa podkatalogi
nie usuwa katalogu nadrzędnego
Kod:
for filename in os.listdir(dirpath):
filepath = os.path.join(dirpath, filename)try:
shutil.rmtree(filepath)exceptOSError:
os.remove(filepath)
Jak wiele innych odpowiedzi, nie próbuje to dostosowywać uprawnień, aby umożliwić usuwanie plików / katalogów.
import os
# Python 2.7
map( os.unlink,(os.path.join( mydir,f)for f in os.listdir(mydir)))# Python 3+
list( map( os.unlink,(os.path.join( mydir,f)for f in os.listdir(mydir))))
Bardziej niezawodnym rozwiązaniem uwzględniającym również pliki i katalogi byłoby (2.7):
def rm(f):if os.path.isdir(f):return os.rmdir(f)if os.path.isfile(f):return os.unlink(f)raiseTypeError,'must be either file or directory'
map( rm,(os.path.join( mydir,f)for f in os.listdir(mydir)))
w przypadku dużych operacji użycie generatora może być frakcjonalnie bardziej wydajnemap( os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir)) )
user25064
faktycznie próbując tego użyć, zdałem sobie sprawę, że obiekt mapy musi być iterowany, więc wymagane jest wywołanie list (lub coś, co będzie iterować), jaklist(map(os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir))))
user25064
Pierwsza zawarta w odpowiedzi, druga nie ma dla mnie sensu. Dlaczego powinieneś iterować po funkcji zamapowanej na iterowalną? Mapa to robi.
Ten na pewno nie zadziała, jeśli „mydir” zawiera co najmniej jeden folder, ponieważ unlink działa tylko dla plików ...
kupsef
14
Uwagi: na wypadek, gdyby ktoś głosował za moją odpowiedzią, muszę coś wyjaśnić.
Każdy lubi krótkie i proste odpowiedzi. Czasami jednak rzeczywistość nie jest taka prosta.
Wróć do mojej odpowiedzi. Wiem, że shutil.rmtree()można go użyć do usunięcia drzewa katalogów. Użyłem go wiele razy w swoich własnych projektach. Musisz jednak zdać sobie sprawę, że sam katalog również zostanie usuniętyshutil.rmtree() . Chociaż może to być akceptowalne dla niektórych, nie jest to poprawna odpowiedź na usunięcie zawartości folderu (bez skutków ubocznych) .
Pokażę ci przykład skutków ubocznych. Załóżmy, że masz katalog z dostosowanymi bitami właściciela i trybu, w którym jest dużo treści. Następnie usuwasz go za pomocą shutil.rmtree()i odbudowuje się za pomocą os.mkdir(). Zamiast tego otrzymasz pusty katalog z domyślnymi (odziedziczonymi) bitami właściciela i trybu. Chociaż możesz mieć uprawnienia do usuwania zawartości, a nawet katalogu, możesz nie być w stanie przywrócić pierwotnego właściciela i bitów trybu w katalogu (np. Nie jesteś superużytkownikiem).
Wreszcie, bądź cierpliwy i przeczytaj kod . Jest długi i brzydki (w zasięgu wzroku), ale udowodniono, że jest niezawodny i wydajny (w użyciu).
Oto długie i brzydkie, ale niezawodne i wydajne rozwiązanie.
Rozwiązuje kilka problemów, które nie zostały rozwiązane przez innych użytkowników:
Prawidłowo obsługuje łącza symboliczne, w tym nie wywołuje shutil.rmtree()łącza symbolicznego (które przejdzieos.path.isdir() test, jeśli zostanie dowiązany do katalogu; nawet wynik os.walk()zawiera również dowiązania symboliczne).
Ładnie obsługuje pliki tylko do odczytu.
Oto kod (jedyną przydatną funkcją jest clear_dir()):
import os
import stat
import shutil
# http://stackoverflow.com/questions/1889597/deleting-directory-in-pythondef _remove_readonly(fn, path_, excinfo):# Handle read-only files and directoriesif fn is os.rmdir:
os.chmod(path_, stat.S_IWRITE)
os.rmdir(path_)elif fn is os.remove:
os.lchmod(path_, stat.S_IWRITE)
os.remove(path_)def force_remove_file_or_symlink(path_):try:
os.remove(path_)exceptOSError:
os.lchmod(path_, stat.S_IWRITE)
os.remove(path_)# Code from shutil.rmtree()def is_regular_dir(path_):try:
mode = os.lstat(path_).st_mode
except os.error:
mode =0return stat.S_ISDIR(mode)def clear_dir(path_):if is_regular_dir(path_):# Given path is a directory, clear its contentfor name in os.listdir(path_):
fullpath = os.path.join(path_, name)if is_regular_dir(fullpath):
shutil.rmtree(fullpath, onerror=_remove_readonly)else:
force_remove_file_or_symlink(fullpath)else:# Given path is a file or a symlink.# Raise an exception here to avoid accidentally clearing the content# of a symbolic linked directory.raiseOSError("Cannot call clear_dir() on a symbolic link")
Nie rozumiem, w jakim kontekście zmiana trybu pliku ma sens. Na moim komputerze Mac, os.removew przeciwieństwie do rmnarzędzia, z przyjemnością usuwa pliki tylko do odczytu, o ile jesteś ich właścicielem. Tymczasem jeśli jest to plik, którego nie posiadasz, do którego masz dostęp tylko do odczytu, nie możesz go usunąć ani zmienić jego uprawnień. Nie znam żadnej sytuacji w żadnym systemie, w której nie można usunąć pliku tylko do odczytu, os.removeale można zmienić jego uprawnienia. Ponadto używasz lchmod, który nie istnieje na moim komputerze Mac, ani w systemie Windows zgodnie z jego dokumentacją. Dla jakiej platformy przeznaczony jest ten kod ?!
Mark Amery
14
Dziwi mnie, że nikt nie wspominał o niesamowitym pathlibwykonywaniu tej pracy.
Jeśli chcesz tylko usunąć pliki z katalogu, może to być oneliner
from pathlib importPath[f.unlink()for f inPath("/path/to/folder").glob("*")if f.is_file()]
Aby rekurencyjnie usunąć katalogi, możesz napisać coś takiego:
from pathlib importPathfrom shutil import rmtree
for path inPath("/path/to/folder").glob("**/*"):if path.is_file():
path.unlink()elif path.is_dir():
rmtree(path)
.iterdir()zamiast .glob(...)powinien również działać.
S. Kirby
11
import os
import shutil
# Gather directory contents
contents =[os.path.join(target_dir, i)for i in os.listdir(target_dir)]# Iterate and remove each item in the appropriate manner[os.remove(i)if os.path.isfile(i)or os.path.islink(i)else shutil.rmtree(i)for i in contents]
Wcześniejszy komentarz wspomina także o użyciu os.scandir w Python 3.5+. Na przykład:
import os
import shutil
with os.scandir(target_dir)as entries:for entry in entries:if entry.is_file()or entry.is_symlink():
os.remove(entry.path)elif entry.is_dir():
shutil.rmtree(entry.path)
os.listdir()nie rozróżnia plików od katalogów i szybko będziesz mieć problemy z rozłączeniem ich. Istnieje dobry przykład os.walk()rekurencyjnego usuwania katalogu tutaj i wskazówki, jak dostosować go do swoich okoliczności.
Ma to radykalnie inną semantykę od tego, o co pyta pytanie i nie powinno być uważane za prawidłową odpowiedź.
fatuhoku
1
Z szacunkiem uważam, że „Usuń zawartość folderu lokalnego” nie wymaga usunięcia samego folderu. Ten sam problem, co ta odpowiedź , z tą różnicą, że otrzymaliśmy wiele pozytywnych opinii!
fatuhoku
3
To tak, jakby odpowiedzieć na pytanie „W jaki sposób funkcja zwraca liczbę 1 w Pythonie?” z def return_a_one (): launch_some_nukes () return 1
fatuhoku 26.09.13
2
Oczywiście semantyka jest inna: ale równie dobrze możesz uznać to za inny sposób spojrzenia na problem. To rozwiązanie jest całkowicie poprawne, ponieważ rozwiązuje problem. Istnieje różnica w przykładzie „launch_some_nukes”: 1. Rozwiązanie jest krótsze i łatwiejsze niż zaakceptowane i w przeciwieństwie do cytowanej odpowiedzi jest prawidłowe. 2. odpowiednikiem „launch_some_nukes” w tym przypadku jest usunięcie i ponowne utworzenie folderu. Różnica między starym i nowym folderem to tylko numer i-węzła (prawdopodobnie nieistotny dla OP)
Pamiętaj, że shnie jest częścią standardowej biblioteki i wymaga instalacji z PyPI, zanim będziesz mógł z niej korzystać. Ponadto, ponieważ faktycznie wywołuje rmto podproces, nie będzie działać w systemie Windows, gdzie rmnie istnieje. Zgłasza także wyjątek, jeśli folder zawiera jakieś podkatalogi.
Mark Amery
5
Wiem, że to stary wątek, ale znalazłem coś ciekawego na oficjalnej stronie Pythona. Wystarczy udostępnić kolejny pomysł na usunięcie całej zawartości katalogu. Ponieważ mam pewne problemy z autoryzacją podczas korzystania z shutil.rmtree () i nie chcę usuwać katalogu i odtwarzać go ponownie. Oryginalny adres to http://docs.python.org/2/library/os.html#os.walk . Mam nadzieję, że może komuś pomóc.
def emptydir(top):if(top =='/'or top =="\\"):returnelse:for root, dirs, files in os.walk(top, topdown=False):for name in files:
os.remove(os.path.join(root, name))for name in dirs:
os.rmdir(os.path.join(root, name))
Odpowiedz na ograniczoną, konkretną sytuację: zakładając, że chcesz usunąć pliki podczas utrzymywania drzewa podfolderów, możesz użyć algorytmu rekurencyjnego:
import os
def recursively_remove_files(f):if os.path.isfile(f):
os.unlink(f)elif os.path.isdir(f):for fi in os.listdir(f):
recursively_remove_files(os.path.join(f, fi))
recursively_remove_files(my_directory)
Może nieco nie na temat, ale myślę, że wielu uznałoby to za przydatne
Używanie os.walkw sposób pokazany na stackoverflow.com/a/54889532/1709587 jest być może lepszym sposobem na usunięcie wszystkich plików przy jednoczesnym zachowaniu nienaruszonej struktury katalogów.
Mark Amery
-1
Zakładając, temp_dirże zostanie usunięty, użycie polecenia w jednym wierszu osbyłoby:
_ =[os.remove(os.path.join(save_dir,i))for i in os.listdir(temp_dir)]
Uwaga: jest to tylko jeden linijka do usuwania plików „Nie usuwa katalogów.
os.system('rm -rf folder')
Odpowiedzi:
źródło
except Exception as e:
tymi odczytamiW0703: Catching too general exception Exception
. Czy jest jakiś konkretniejszy wyjątek do złapania, czy powinienem go zignorować?Możesz po prostu to zrobić:
Oczywiście możesz użyć innego filtra w swojej ścieżce, na przykład: /YOU/PATH/*.txt do usunięcia wszystkich plików tekstowych z katalogu.
źródło
*
nie będzie wyświetlał ukrytych plików, powinniśmy również dodaćglob.glob('path/.*)
import sh; sh.rm(files)
import sh; sh.rm(files)
wygląda ładniej, możesz napotkać problemy, jeśli w katalogu jest więcej niż 1024 pliki.Możesz usunąć sam folder, a także całą jego zawartość, używając
shutil.rmtree
:źródło
rmtree
. Jakos.makedirs(dir)
OSError: [Errno 16] Device or resource busy
Rozwijając odpowiedź mhawke, właśnie to zaimplementowałem. Usuwa całą zawartość folderu, ale nie sam folder. Testowany w systemie Linux z plikami, folderami i dowiązaniami symbolicznymi powinien również działać w systemie Windows.
źródło
walk
służy do podziału katalogów na pliki, które muszą być obsługiwane w inny sposób. Możesz także użyćos.listdir
, ale musisz ręcznie sprawdzić, czy każdy wpis jest katalogiem lub plikiem.os.walk
tutaj się nie powtórzy, ponieważ zwraca generator, tylko rekurencyjnie przegląda podkatalogi, gdy próbujesz go rozwinąć, a do czasu pierwszej iteracji tej pętli nie ma podkatalogów pozostawiony do obejrzenia. Zasadniczoos.walk
jest tutaj używany jako alternatywny sposób odróżnienia folderów najwyższego poziomu od plików najwyższego poziomu; rekurencja nie jest używana i nie ponosimy za nią kosztów wydajności. Jest to jednak ekscentryczne i zgadzam się, że proponowane przez ciebie podejście jest lepsze po prostu dlatego, że jest bardziej wyraźne i czytelne.Używanie
rmtree
i odtwarzanie folderu może działać, ale podczas usuwania i natychmiastowego odtwarzania folderów na dyskach sieciowych napotkałem błędy.Proponowane rozwiązanie wykorzystujące walk nie działa, ponieważ służy
rmtree
do usuwania folderów, a następnie może próbować użyćos.unlink
plików wcześniej znajdujących się w tych folderach. To powoduje błąd.Opublikowane
glob
rozwiązanie będzie również próbowało usunąć niepuste foldery, powodując błędy.Sugeruję użycie:
źródło
os.path.isfile()
powróciFalse
(ponieważ następuje dowiązanie symboliczne), a w końcu wywołaszshutil.rmtree()
dowiązanie symboliczne, które się podniesieOSError("Cannot call rmtree on a symbolic link")
.islink
sprawdzenia tutaj, aby poprawnie obsługiwać dowiązania symboliczne do katalogów. Dodałem taki czek do zaakceptowanej odpowiedzi.To:
Kod:
Jak wiele innych odpowiedzi, nie próbuje to dostosowywać uprawnień, aby umożliwić usuwanie plików / katalogów.
źródło
Jako oneliner:
Bardziej niezawodnym rozwiązaniem uwzględniającym również pliki i katalogi byłoby (2.7):
źródło
map( os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir)) )
list(map(os.unlink, (os.path.join( mydir,f) for f in os.listdir(mydir))))
map
wlist
rzeczywiście iteracyjne. Zobacz http://stackoverflow.com/questions/1303347/getting-a-map-to-return-a-list-in-python-3-xUwagi: na wypadek, gdyby ktoś głosował za moją odpowiedzią, muszę coś wyjaśnić.
shutil.rmtree()
można go użyć do usunięcia drzewa katalogów. Użyłem go wiele razy w swoich własnych projektach. Musisz jednak zdać sobie sprawę, że sam katalog również zostanie usuniętyshutil.rmtree()
. Chociaż może to być akceptowalne dla niektórych, nie jest to poprawna odpowiedź na usunięcie zawartości folderu (bez skutków ubocznych) .shutil.rmtree()
i odbudowuje się za pomocąos.mkdir()
. Zamiast tego otrzymasz pusty katalog z domyślnymi (odziedziczonymi) bitami właściciela i trybu. Chociaż możesz mieć uprawnienia do usuwania zawartości, a nawet katalogu, możesz nie być w stanie przywrócić pierwotnego właściciela i bitów trybu w katalogu (np. Nie jesteś superużytkownikiem).Oto długie i brzydkie, ale niezawodne i wydajne rozwiązanie.
Rozwiązuje kilka problemów, które nie zostały rozwiązane przez innych użytkowników:
shutil.rmtree()
łącza symbolicznego (które przejdzieos.path.isdir()
test, jeśli zostanie dowiązany do katalogu; nawet wynikos.walk()
zawiera również dowiązania symboliczne).Oto kod (jedyną przydatną funkcją jest
clear_dir()
):źródło
os.remove
w przeciwieństwie dorm
narzędzia, z przyjemnością usuwa pliki tylko do odczytu, o ile jesteś ich właścicielem. Tymczasem jeśli jest to plik, którego nie posiadasz, do którego masz dostęp tylko do odczytu, nie możesz go usunąć ani zmienić jego uprawnień. Nie znam żadnej sytuacji w żadnym systemie, w której nie można usunąć pliku tylko do odczytu,os.remove
ale można zmienić jego uprawnienia. Ponadto używaszlchmod
, który nie istnieje na moim komputerze Mac, ani w systemie Windows zgodnie z jego dokumentacją. Dla jakiej platformy przeznaczony jest ten kod ?!Dziwi mnie, że nikt nie wspominał o niesamowitym
pathlib
wykonywaniu tej pracy.Jeśli chcesz tylko usunąć pliki z katalogu, może to być oneliner
Aby rekurencyjnie usunąć katalogi, możesz napisać coś takiego:
źródło
.iterdir()
zamiast.glob(...)
powinien również działać.Wcześniejszy komentarz wspomina także o użyciu os.scandir w Python 3.5+. Na przykład:
źródło
os.path.isdir()
nie jest prawidłowym sposobem na odróżnienie zwykłego katalogu od dowiązania symbolicznego. Wywołanieshutil.rmtree()
dowiązania symbolicznego spowodujeOSError
wyjątek.Lepiej skorzystaj
os.walk()
z tego.os.listdir()
nie rozróżnia plików od katalogów i szybko będziesz mieć problemy z rozłączeniem ich. Istnieje dobry przykłados.walk()
rekurencyjnego usuwania katalogu tutaj i wskazówki, jak dostosować go do swoich okoliczności.źródło
Rozwiązałem problem w ten sposób:
źródło
Jeszcze inne rozwiązanie:
źródło
sh
nie jest częścią standardowej biblioteki i wymaga instalacji z PyPI, zanim będziesz mógł z niej korzystać. Ponadto, ponieważ faktycznie wywołujerm
to podproces, nie będzie działać w systemie Windows, gdzierm
nie istnieje. Zgłasza także wyjątek, jeśli folder zawiera jakieś podkatalogi.Wiem, że to stary wątek, ale znalazłem coś ciekawego na oficjalnej stronie Pythona. Wystarczy udostępnić kolejny pomysł na usunięcie całej zawartości katalogu. Ponieważ mam pewne problemy z autoryzacją podczas korzystania z shutil.rmtree () i nie chcę usuwać katalogu i odtwarzać go ponownie. Oryginalny adres to http://docs.python.org/2/library/os.html#os.walk . Mam nadzieję, że może komuś pomóc.
źródło
Aby usunąć wszystkie pliki w katalogu oraz jego podkatalogach, bez usuwania samych folderów, po prostu wykonaj następujące czynności:
źródło
Jeśli używasz systemu * nix, dlaczego nie skorzystać z polecenia systemowego?
źródło
Całkiem intuicyjny sposób:
źródło
Myślę, że ten kod działa. Nie spowoduje to usunięcia folderu i możesz użyć tego kodu do usunięcia plików o określonym rozszerzeniu.
źródło
Musiałem usunąć pliki z 3 oddzielnych folderów w jednym katalogu nadrzędnym:
Ten prosty kod załatwił sprawę: (Jestem na Uniksie)
Mam nadzieję że to pomoże.
źródło
Rozwiązałem problem
rmtree
makedirs
, dodająctime.sleep()
między:źródło
Odpowiedz na ograniczoną, konkretną sytuację: zakładając, że chcesz usunąć pliki podczas utrzymywania drzewa podfolderów, możesz użyć algorytmu rekurencyjnego:
Może nieco nie na temat, ale myślę, że wielu uznałoby to za przydatne
źródło
os.walk
w sposób pokazany na stackoverflow.com/a/54889532/1709587 jest być może lepszym sposobem na usunięcie wszystkich plików przy jednoczesnym zachowaniu nienaruszonej struktury katalogów.Zakładając,
temp_dir
że zostanie usunięty, użycie polecenia w jednym wierszuos
byłoby:Uwaga: jest to tylko jeden linijka do usuwania plików „Nie usuwa katalogów.
Mam nadzieję że to pomoże. Dzięki.
źródło
Użyj metody poniżej, aby usunąć zawartość katalogu, a nie sam katalog:
źródło
najprostszy sposób na usunięcie wszystkich plików w folderze / usunięcie wszystkich plików
źródło
To powinno załatwić sprawę tylko za pomocą modułu systemu operacyjnego, aby wyświetlić listę, a następnie usunąć!
Pracował dla mnie, wszelkie problemy daj mi znać!
źródło