Jak usunąć plik lub folder w Pythonie?
python
file-io
directory
delete-file
Zygimantas
źródło
źródło
os.remove()
zgłasza wyjątek, więc może być konieczne sprawdzenieos.path.isfile()
najpierw lub zawinięcie wtry
.os.remove()
jeśli plik nie istniejeFileNotFoundError
.os.remove()
potrzeba wielu argumentów, aby usunąć wiele plików, czy wywołujesz go za każdym razem dla każdego pliku?Składnia Python, aby usunąć plik
Lub
Lub
biblioteka pathlib dla wersji Python> 3.5
Path.unlink (missing_ok = False)
Metoda rozłączenia użyta do usunięcia pliku lub łącza symbolik.
Najlepsze praktyki
a.
os.path.isfile("/path/to/file")
b. Posługiwać się
exception handling.
PRZYKŁAD dla
os.path.isfile
Obsługa wyjątków
ODPOWIEDNIE WYDAJNOŚĆ
Składnia Python, aby usunąć folder
Przykład dla
shutil.rmtree()
źródło
Posługiwać się
(Zobacz pełną dokumentację dotyczącą shutil ) i / lub
i
(Pełna dokumentacja na os .)
źródło
Tutaj jest solidnym funkcja, która wykorzystuje zarówno
os.remove
ashutil.rmtree
:źródło
remove(path);
wywołania ISO C.os.path.islink(file_path):
błąd powinien byćos.path.islink(path):
Można użyć wbudowanego
pathlib
modułu (wymaga Python 3.4+, ale istnieją backporty dla starszych wersji na PyPI:pathlib
,pathlib2
).Aby usunąć plik, istnieje
unlink
metoda:Lub
rmdir
metoda usunięcia pustego folderu:źródło
pathlib
tym, co mogłoby poradzić sobie z usuwaniem niepustych katalogów. Jakkolwiek możesz użyćshutil.rmtree
. Zostało to wspomniane w kilku innych odpowiedziach, więc go nie uwzględniłem.W przypadku Python 3, aby usunąć plik i katalog indywidualnie, użyj odpowiednio metod
unlink
i object:rmdir
Path
Zauważ, że możesz również używać ścieżek względnych z
Path
obiektami i możesz sprawdzić swój bieżący katalog roboczy za pomocąPath.cwd
.Aby usunąć poszczególne pliki i katalogi w Pythonie 2, zobacz sekcję oznaczoną poniżej.
Aby usunąć katalog z zawartością, użyj
shutil.rmtree
i zwróć uwagę, że jest on dostępny w Python 2 i 3:Demonstracja
Nowością w Pythonie 3.4 jest
Path
obiekt.Użyjmy jednego, aby utworzyć katalog i plik, aby zademonstrować użycie. Zauważ, że używamy
/
do łączenia części ścieżki, to rozwiązuje problemy między systemami operacyjnymi i problemy z używaniem odwrotnych ukośników w systemie Windows (gdzie musisz albo podwoić swoje odwrotne ukośniki jak\\
lub użyć nieprzetworzonych ciągów, takich jakr"foo\bar"
):i teraz:
Teraz usuńmy je. Najpierw plik:
Możemy użyć globowania do usunięcia wielu plików - najpierw utwórzmy kilka plików:
Następnie po prostu powtórz wzór globalny:
Teraz demonstruję usunięcie katalogu:
Co jeśli chcemy usunąć katalog i wszystko w nim zawarte? W tym przypadku użycia użyj
shutil.rmtree
Utwórzmy ponownie nasz katalog i plik:
i zauważ,
rmdir
że to się nie powiedzie, chyba że jest puste, dlatego rmtree jest tak wygodny:Teraz zaimportuj rmtree i przekaż katalog do funkcji:
i widzimy, że całość została usunięta:
Python 2
Jeśli korzystasz z Python 2, istnieje backport modułu pathlib o nazwie pathlib2 , który można zainstalować za pomocą pip:
Następnie możesz aliasować bibliotekę do
pathlib
Lub po prostu zaimportuj bezpośrednio
Path
obiekt (jak pokazano tutaj):Jeśli to za dużo, możesz usunąć pliki za pomocą
os.remove
lubos.unlink
lub
i możesz usunąć katalogi za pomocą
os.rmdir
:Zauważ, że jest też
os.removedirs
- usuwa rekursywnie tylko puste katalogi, ale może pasować do twojego przypadku użycia.źródło
rmtree(directory_path)
działa w Pythonie 3.6.6, ale nie w Pythonie 3.5.2 -rmtree(str(directory_path)))
tam potrzebujesz .źródło
shutil.rmtree to funkcja asynchroniczna, więc jeśli chcesz sprawdzić, kiedy się zakończy, możesz użyć pętli while ...
źródło
shutil.rmtree
nie powinien być asynchroniczny. Może się jednak wydawać, że działa w systemie Windows z zakłóceniami ze strony skanerów antywirusowych.Aby usunąć pliki:
lub
Obie funkcje są semantycznie takie same. Ta funkcja usuwa (usuwa) ścieżkę pliku. Jeśli ścieżka nie jest plikiem i jest katalogiem, zgłaszany jest wyjątek.
Aby usunąć foldery:
lub
Aby usunąć całe drzewa katalogów,
shutil.rmtree()
można użyć.os.rmdir
działa tylko wtedy, gdy katalog jest pusty i istnieje.Aby rekurencyjnie usuwać foldery w kierunku rodzica:
Usuwa każdy pusty katalog nadrzędny z self, aż nadrzędny, który ma jakąś zawartość
Aby uzyskać więcej informacji sprawdź oficjalny dokument:
os.unlink
,os.remove
,os.rmdir
,shutil.rmtree
,os.removedirs
źródło
Aby usunąć wszystkie pliki z folderu
Aby usunąć wszystkie foldery z katalogu
źródło
Aby uniknąć problemu TOCTOU podkreślonego w komentarzu Érica Araujo , możesz złapać wyjątek, aby wywołać prawidłową metodę:
Ponieważ
shutil.rmtree()
usunie tylko katalogi ios.remove()
lubos.unlink()
usunie tylko pliki.źródło
shutil.rmtree()
usuwa nie tylko katalog, ale także jego zawartość.Polecam używać,
subprocess
jeśli piszesz piękny i czytelny kod, który jest twoją filiżanką herbaty:A jeśli nie jesteś inżynierem oprogramowania, możesz rozważyć użycie Jupyter; możesz po prostu wpisać polecenia bash:
Tradycyjnie używasz
shutil
:źródło
subprocess
tego.shutil.rmtree
działarm -r
dobrze, z dodatkową zaletą pracy w systemie Windows.