Wie kann ich eine Datei oder einen Ordner löschen?
Wie kann ich eine Datei oder einen Ordner in Python löschen?
Zygimantas
Richie Hindle
-
os.remove()
entfernt eine Datei. -
os.rmdir()
entfernt ein leeres Verzeichnis. -
shutil.rmtree()
löscht ein Verzeichnis und seinen gesamten Inhalt.
Path
Objekte aus Python 3.4+ pathlib
-Modul machen auch diese Instanzmethoden verfügbar:
-
pathlib.Path.unlink()
entfernt eine Datei oder einen symbolischen Link. -
pathlib.Path.rmdir()
entfernt ein leeres Verzeichnis.
-
os.rmdir() unter Windows entfernt auch symbolische Verzeichnisverknüpfungen, selbst wenn das Zielverzeichnis nicht leer ist
– Ilya Serbis
18. Dezember 2015 um 17:23 Uhr
-
Wenn die Datei nicht existiert,
os.remove()
löst eine Ausnahme aus, daher kann eine Überprüfung erforderlich seinos.path.isfile()
zuerst, oder wickeln Sie in atry
.– Benutzer1142217
4. Juli 2018 um 0:00 Uhr
-
Nur zur Vervollständigung … die Ausnahme, die von ausgelöst wurde
os.remove()
wenn eine Datei nicht existiert istFileNotFoundError
.– PedroA
4. Februar 2020 um 17:52 Uhr
-
Tut
os.remove()
Nehmen Sie mehrere Argumente, um mehrere Dateien zu löschen, oder rufen Sie es jedes Mal für jede Datei auf?– Benutzer324747
9. Mai 2020 um 23:57 Uhr
-
@ Jérôme denke ich
missing_ok=True
, hinzugefügt in 3.8 löst das!– Felix
8. Dezember 2020 um 21:04 Uhr
Anand Tripathi
Python-Syntax zum Löschen einer Datei
import os
os.remove("/tmp/<file_name>.txt")
oder
import os
os.unlink("/tmp/<file_name>.txt")
oder
pathlib Bibliothek für Python-Version >= 3.4
file_to_rem = pathlib.Path("/tmp/<file_name>.txt")
file_to_rem.unlink()
Pfad.unlink(missing_ok=False)
Unlink-Methode zum Entfernen der Datei oder des symbolischen Links.
- Wenn missing_ok falsch ist (Standardeinstellung), wird FileNotFoundError ausgelöst, wenn der Pfad nicht existiert.
- Wenn missing_ok wahr ist, werden FileNotFoundError-Ausnahmen ignoriert (gleiches Verhalten wie der POSIX-Befehl rm -f).
- Geändert in Version 3.8: Der Parameter missing_ok wurde hinzugefügt.
Beste Übung
Überprüfen Sie zuerst, ob die Datei oder der Ordner existiert, und löschen Sie sie dann. Sie können dies auf zwei Arten erreichen:
os.path.isfile("/path/to/file")
- Verwenden
exception handling.
BEISPIEL Pro os.path.isfile
#!/usr/bin/python
import os
myfile = "/tmp/foo.txt"
# If file exists, delete it.
if os.path.isfile(myfile):
os.remove(myfile)
else:
# If it fails, inform the user.
print("Error: %s file not found" % myfile)
Ausnahmebehandlung
#!/usr/bin/python
import os
# Get input.
myfile = raw_input("Enter file name to delete: ")
# Try to delete the file.
try:
os.remove(myfile)
except OSError as e:
# If it fails, inform the user.
print("Error: %s - %s." % (e.filename, e.strerror))
Jeweiliger Ausgang
Enter file name to delete : demo.txt Error: demo.txt - No such file or directory. Enter file name to delete : rrr.txt Error: rrr.txt - Operation not permitted. Enter file name to delete : foo.txt
Python-Syntax zum Löschen eines Ordners
shutil.rmtree()
Beispiel für shutil.rmtree()
#!/usr/bin/python
import os
import sys
import shutil
# Get directory name
mydir = raw_input("Enter directory name: ")
# Try to remove the tree; if it fails, throw an error using try...except.
try:
shutil.rmtree(mydir)
except OSError as e:
print("Error: %s - %s." % (e.filename, e.strerror))
-
Die Ausnahmebehandlung wird der Überprüfung vorgezogen, da die Datei zwischen den beiden Zeilen entfernt oder geändert werden könnte (TOCTOU: en.wikipedia.org/wiki/Time_of_check_to_time_of_use) Siehe Python-FAQ docs.python.org/3/glossary.html#term-eafp
– merwok
22. Mai 2019 um 21:37 Uhr
-
Was bringt es, die Ausnahme im allerletzten Beispiel abzufangen?
– Welgriw
5. Juli 2021 um 7:46 Uhr
Mihai Maruseac
Verwenden
shutil.rmtree(path[, ignore_errors[, onerror]])
(Siehe vollständige Dokumentation auf Shutil) und/oder
os.remove
und
os.rmdir
(Vollständige Dokumentation auf os.)
-
Bitte fügen Sie die Schnittstelle pathlib (neu seit Python 3.4) zu Ihrer Liste hinzu.
– Paebbels
25. April 2016 um 19:38 Uhr
Flycee
Hier ist eine robuste Funktion, die beides verwendet os.remove
und shutil.rmtree
:
def remove(path):
""" param <path> could either be relative or absolute. """
if os.path.isfile(path) or os.path.islink(path):
os.remove(path) # remove the file
elif os.path.isdir(path):
shutil.rmtree(path) # remove dir and all contains
else:
raise ValueError("file {} is not a file or dir.".format(path))
MSeifert
Sie können die integrierte verwenden pathlib
Modul (benötigt Python 3.4+, aber es gibt Backports für ältere Versionen auf PyPI: pathlib
, pathlib2
).
Zum Entfernen einer Datei gibt es die unlink
Methode:
import pathlib
path = pathlib.Path(name_of_file)
path.unlink()
Oder der rmdir
Methode zum Entfernen eines leer Mappe:
import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()
-
Was ist aber mit einem nicht leeren Verzeichnis?
– Pranasas
11. Juli 2018 um 8:43 Uhr
-
@Pranasas Leider scheint es nichts (nativ) zu geben
pathlib
die das Löschen nicht leerer Verzeichnisse handhaben kann. Allerdings könnten Sie verwendenshutil.rmtree
. Es wurde in mehreren anderen Antworten erwähnt, daher habe ich es nicht aufgenommen.– MSeifert
11. Juli 2018 um 8:46 Uhr
DS_ShraShetty
Löschen einer Datei oder eines Ordners in Python
Es gibt mehrere Möglichkeiten, eine Datei in Python zu löschen, aber die besten sind die folgenden:
- os.remove() entfernt eine Datei.
- os.unlink() entfernt eine Datei. es ist ein Unix-Name der Methode remove().
- Shutil.rmtree() löscht ein Verzeichnis und seinen gesamten Inhalt.
- pathlib.Path.unlink() löscht eine einzelne Datei Das pathlib-Modul ist in Python 3.4 und höher verfügbar.
os.remove()
Beispiel 1: Einfaches Beispiel zum Entfernen einer Datei mit der Methode os.remove().
import os
os.remove("test_file.txt")
print("File removed successfully")
Beispiel 2: Überprüfen, ob die Datei mit os.path.isfile existiert und mit os.remove löschen
import os
#checking if file exist or not
if(os.path.isfile("test.txt")):
#os.remove() function to remove the file
os.remove("test.txt")
#Printing the confirmation message of deletion
print("File Deleted successfully")
else:
print("File does not exist")
#Showing the message instead of throwig an error
Beispiel 3: Python-Programm zum Löschen aller Dateien mit einer bestimmten Erweiterung
import os
from os import listdir
my_path="C:\Python Pool\Test\"
for file_name in listdir(my_path):
if file_name.endswith('.txt'):
os.remove(my_path + file_name)
Beispiel 4: Python-Programm zum Löschen aller Dateien in einem Ordner
Um alle Dateien in einem bestimmten Verzeichnis zu löschen, müssen Sie einfach das Symbol * als Musterzeichenfolge verwenden. #Import von os- und glob-Modulen import os, glob #Schleife Durch den Ordner projiziert alle Dateien und löscht sie eine nach der anderen für die Datei in glob.glob(“pythonpool/*”): os.remove(file) print(“Deleted ” + str(Datei))
os.unlink()
os.unlink() ist ein Alias oder ein anderer Name von os.remove() . Wie im Unix-Betriebssystem wird das Entfernen auch als Unlink bezeichnet. Hinweis: Alle Funktionalitäten und Syntax sind die gleichen wie bei os.unlink() und os.remove(). Beide werden verwendet, um den Python-Dateipfad zu löschen. Beides sind Methoden im Modul os in den Standardbibliotheken von Python, die die Löschfunktion ausführen.
Shutil.rmtree()
Beispiel 1: Python-Programm zum Löschen einer Datei mit shutdown.rmtree()
import shutil
import os
# location
location = "E:/Projects/PythonPool/"
# directory
dir = "Test"
# path
path = os.path.join(location, dir)
# removing directory
shutil.rmtree(path)
Beispiel 2: Python-Programm zum Löschen einer Datei mit shutdown.rmtree()
import shutil
import os
location = "E:/Projects/PythonPool/"
dir = "Test"
path = os.path.join(location, dir)
shutil.rmtree(path)
pathlib.Path.rmdir() zum Entfernen des leeren Verzeichnisses
Das Pathlib-Modul bietet verschiedene Möglichkeiten, mit Ihren Dateien zu interagieren. Rmdir ist eine der Pfadfunktionen, mit der Sie einen leeren Ordner löschen können. Zuerst müssen Sie den Pfad () für das Verzeichnis auswählen, und dann wird durch Aufrufen der Methode rmdir () die Ordnergröße überprüft. Wenn es leer ist, wird es gelöscht.
Dies ist eine gute Möglichkeit, leere Ordner zu löschen, ohne befürchten zu müssen, dass tatsächliche Daten verloren gehen.
from pathlib import Path
q = Path('foldername')
q.rmdir()
-
Was ist aber mit einem nicht leeren Verzeichnis?
– Pranasas
11. Juli 2018 um 8:43 Uhr
-
@Pranasas Leider scheint es nichts (nativ) zu geben
pathlib
die das Löschen nicht leerer Verzeichnisse handhaben kann. Allerdings könnten Sie verwendenshutil.rmtree
. Es wurde in mehreren anderen Antworten erwähnt, daher habe ich es nicht aufgenommen.– MSeifert
11. Juli 2018 um 8:46 Uhr
Wie lösche ich eine Datei oder einen Ordner in Python?
Verwenden Sie für Python 3, um die Datei und das Verzeichnis einzeln zu entfernen, die unlink
und rmdir
Path
Objektmethoden bzw.:
from pathlib import Path
dir_path = Path.home() / 'directory'
file_path = dir_path / 'file'
file_path.unlink() # remove file
dir_path.rmdir() # remove directory
Beachten Sie, dass Sie auch relative Pfade mit verwenden können Path
Objekte, und Sie können Ihr aktuelles Arbeitsverzeichnis mit überprüfen Path.cwd
.
Informationen zum Entfernen einzelner Dateien und Verzeichnisse in Python 2 finden Sie im Abschnitt mit der entsprechenden Bezeichnung unten.
Verwenden Sie zum Entfernen eines Verzeichnisses mit Inhalt shutil.rmtree
und beachten Sie, dass dies in Python 2 und 3 verfügbar ist:
from shutil import rmtree
rmtree(dir_path)
Demonstration
Neu in Python 3.4 ist die Path
Objekt.
Lassen Sie uns einen verwenden, um ein Verzeichnis und eine Datei zu erstellen, um die Verwendung zu demonstrieren. Beachten Sie, dass wir die verwenden /
Um die Teile des Pfads zu verbinden, umgeht dies Probleme zwischen Betriebssystemen und Probleme bei der Verwendung von Backslashes unter Windows (wobei Sie entweder Ihre Backslashes verdoppeln müssten, wie z \\
oder verwenden Sie rohe Zeichenfolgen, wie r"foo\bar"
):
from pathlib import Path
# .home() is new in 3.5, otherwise use os.path.expanduser('~')
directory_path = Path.home() / 'directory'
directory_path.mkdir()
file_path = directory_path / 'file'
file_path.touch()
und nun:
>>> file_path.is_file()
True
Jetzt löschen wir sie. Zuerst die Datei:
>>> file_path.unlink() # remove file
>>> file_path.is_file()
False
>>> file_path.exists()
False
Wir können Globbing verwenden, um mehrere Dateien zu entfernen – lassen Sie uns zuerst ein paar Dateien dafür erstellen:
>>> (directory_path / 'foo.my').touch()
>>> (directory_path / 'bar.my').touch()
Dann iterieren Sie einfach über das Glob-Muster:
>>> for each_file_path in directory_path.glob('*.my'):
... print(f'removing {each_file_path}')
... each_file_path.unlink()
...
removing ~/directory/foo.my
removing ~/directory/bar.my
Demonstrieren Sie nun das Entfernen des Verzeichnisses:
>>> directory_path.rmdir() # remove directory
>>> directory_path.is_dir()
False
>>> directory_path.exists()
False
Was ist, wenn wir ein Verzeichnis und alles darin entfernen möchten? Verwenden Sie für diesen Anwendungsfall shutil.rmtree
Lassen Sie uns unser Verzeichnis und unsere Datei neu erstellen:
file_path.parent.mkdir()
file_path.touch()
und beachte das rmdir
schlägt fehl, es sei denn, es ist leer, weshalb rmtree so praktisch ist:
>>> directory_path.rmdir()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "~/anaconda3/lib/python3.6/pathlib.py", line 1270, in rmdir
self._accessor.rmdir(self)
File "~/anaconda3/lib/python3.6/pathlib.py", line 387, in wrapped
return strfunc(str(pathobj), *args)
OSError: [Errno 39] Directory not empty: '/home/username/directory'
Importieren Sie nun rmtree und übergeben Sie das Verzeichnis an die Funktion:
from shutil import rmtree
rmtree(directory_path) # remove everything
und wir können sehen, dass das Ganze entfernt wurde:
>>> directory_path.exists()
False
Python 2
Wenn Sie auf Python 2 sind, gibt es eine Backport des pathlib-Moduls namens pathlib2die mit pip installiert werden kann:
$ pip install pathlib2
Und dann können Sie die Bibliothek mit einem Alias versehen pathlib
import pathlib2 as pathlib
Oder einfach direkt importieren Path
Objekt (wie hier gezeigt):
from pathlib2 import Path
Wenn das zu viel ist, können Sie Dateien mit entfernen os.remove
oder os.unlink
from os import unlink, remove
from os.path import join, expanduser
remove(join(expanduser('~'), 'directory/file'))
oder
unlink(join(expanduser('~'), 'directory/file'))
und Sie können Verzeichnisse mit entfernen os.rmdir
:
from os import rmdir
rmdir(join(expanduser('~'), 'directory'))
Beachten Sie, dass es auch eine gibt os.removedirs
– Es entfernt nur leere Verzeichnisse rekursiv, kann aber für Ihren Anwendungsfall geeignet sein.
-
rmtree(directory_path)
funktioniert in Python 3.6.6, aber nicht in Python 3.5.2 – Sie brauchenrmtree(str(directory_path)))
dort.–Stein
22. August 2018 um 8:48 Uhr