it-swarm.com.de

Löschen Sie eine Datei oder einen Ordner

Wie lösche ich eine Datei oder einen Ordner in Python?

1811
Zygimantas

os.remove() entfernt eine Datei.

os.rmdir() entfernt ein leeres Verzeichnis.

shutil.rmtree() löscht ein Verzeichnis und seinen gesamten Inhalt.


Path Objekte aus dem Python 3.4+ pathlib machen auch diese Instanzmethoden verfügbar:

2900
RichieHindle

Python-Syntax zum Löschen einer Datei

import os
os.remove("/tmp/<file_name>.txt")

Oder

import os
os.unlink("/tmp/<file_name>.txt")

Beste Übung

  1. Überprüfen Sie zunächst, ob die Datei oder der Ordner vorhanden ist, und löschen Sie dann nur diese Datei. Dies kann auf zwei Arten erreicht werden:
    ein. os.path.isfile("/path/to/file")
    b. Benutze exception handling.

BEISPIEL für 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:    ## Show an error ##
    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 failed, report it back to the user ##
    print ("Error: %s - %s." % (e.filename, e.strerror))

RESPECTIVE OUTPUT

 Geben Sie den zu löschenden Dateinamen ein: demo.txt 
 Fehler: demo.txt - Keine solche Datei oder kein solches Verzeichnis. 
 
 Geben Sie den zu löschenden Dateinamen ein: rrr.txt 
 Fehler: rrr.txt - Vorgang nicht zulässig. 
 
 Geben Sie den zu löschenden Dateinamen ein: 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 tree; if failed show an error using try...except on screen
try:
    shutil.rmtree(mydir)
except OSError as e:
    print ("Error: %s - %s." % (e.filename, e.strerror))
211
anand tripathi

Verwenden

shutil.rmtree(path[, ignore_errors[, onerror]])

(Siehe vollständige Dokumentation zu shutil ) und/oder

os.remove

und

os.rmdir

(Vollständige Dokumentation zu os .)

71
Mihai Maruseac

Zum Löschen von Dateien:

Sie können unlink oder remove verwenden.

os.unlink(path, *, dir_fd=None)

Oder

os.remove(path, *, dir_fd=None)

Diese Funktion entfernt (löscht) den Dateipfad. Wenn path ein Verzeichnis ist, wird OSError ausgelöst.

Wenn der Pfad in Python 2 nicht vorhanden ist, wird OSError mit [Errno 2] (ENOENT) ausgelöst. In Python 3 wird FileNotFoundError mit [Errno 2] (ENOENT) ausgelöst. Da in Python 3 FileNotFoundError eine Unterklasse von OSError ist, fängt das Fangen der letzteren die ersteren.

Zum Löschen von Ordnern:

os.rmdir(path, *, dir_fd=None)

rmdir Verzeichnispfad entfernen (löschen). Funktioniert nur, wenn das Verzeichnis leer ist, andernfalls wird OSError ausgelöst. Um ganze Verzeichnisbäume zu entfernen, kann shutil.rmtree() verwendet werden.

shutil.rmtree(path, ignore_errors=False, onerror=None)

shutil.rmtree Löscht einen gesamten Verzeichnisbaum. Der Pfad muss auf ein Verzeichnis verweisen (jedoch keine symbolische Verknüpfung zu einem Verzeichnis).

Wenn ignore_errors true ist, werden Fehler, die aus fehlgeschlagenen Entfernungen resultieren, ignoriert. Wenn false oder weggelassen, werden solche Fehler durch Aufrufen eines von onerror angegebenen Handlers behandelt, oder wenn dies weggelassen wird, wird eine Ausnahme ausgelöst.

Siehe auch:

os.removedirs(name)

os.removedirs(name) Verzeichnisse rekursiv entfernen. Funktioniert wie rmdir (), mit der Ausnahme, dass removedirs () bei erfolgreicher Entfernung des Blattverzeichnisses nacheinander alle im Pfad genannten übergeordneten Verzeichnisse entfernt, bis ein Fehler auftritt (der ignoriert wird, da dies im Allgemeinen bedeutet, dass ein übergeordnetes Verzeichnis nicht leer ist ).

Beispielsweise entfernt os.removedirs ('foo/bar/baz') zuerst das Verzeichnis 'foo/bar/baz' und dann 'foo/bar' und 'foo', wenn sie leer sind.

55
Somnath Muluk

Erstellen Sie eine Funktion für euch.

def remove(path):
    """ param <path> could either be relative or absolute. """
    if os.path.isfile(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))
29
flycee

Sie können das integrierte pathlib -Modul verwenden (erfordert Python 3.4+, aber es gibt Backports für ältere Versionen unter PyPI: pathlib , pathlib2 ).

Um eine Datei zu entfernen, gibt es die unlink Methode:

_import pathlib
path = pathlib.Path(name_of_file)
path.unlink()
_

Oder die Methode rmdir , um einen leeren Ordner zu entfernen:

_import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()
_
28
MSeifert

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 Zeichen unlink und rmdirPath Objektmethoden:

_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 für Path -Objekte verwenden und Ihr aktuelles Arbeitsverzeichnis mit _Path.cwd_ überprüfen können.

Informationen zum Entfernen einzelner Dateien und Verzeichnisse in Python 2 finden Sie im folgenden Abschnitt.

Um ein Verzeichnis mit Inhalten zu entfernen, verwenden Sie 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 das Objekt Path.

Erstellen wir mit one ein Verzeichnis und eine Datei, um die Verwendung zu demonstrieren. Beachten Sie, dass wir den _/_ verwenden, um die Teile des Pfads zu verbinden. Dies umgeht Probleme zwischen Betriebssystemen und Probleme bei der Verwendung von Backslashes unter Windows (wobei Sie entweder Ihre Backslashes wie _\\_ verdoppeln müssten). 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 - zuerst erstellen wir ein paar Dateien dafür:

_>>> (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, dass rmdir fehlschlägt, 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/excelsiora/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 mit Python 2 arbeiten, gibt es einen Backport des pathlib-Moduls namens pathlib2 , der mit pip installiert werden kann:

_$ pip install pathlib2
_

Und dann können Sie die Bibliothek als Alias ​​für pathlib verwenden.

_import pathlib2 as pathlib
_

Oder importieren Sie einfach direkt das Objekt Path (wie hier gezeigt):

_from pathlib2 import Path
_

Wenn das zu viel ist, können Sie Dateien mit os.remove_ ODER _os.unlink entfernen.

_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 os.rmdir entfernen:

_from os import rmdir

rmdir(join(expanduser('~'), 'directory'))
_

Beachten Sie, dass es auch einen os.removedirs gibt - er entfernt leere Verzeichnisse nur rekursiv, passt aber möglicherweise zu Ihrem Anwendungsfall.

16
Aaron Hall

shutil.rmtree ist die asynchrone Funktion. Wenn Sie also überprüfen möchten, wann sie abgeschlossen ist, können Sie while ... loop verwenden

import os
import shutil

shutil.rmtree(path)

while os.path.exists(path):
  pass

print('done')
3
m0z4rt
import os

folder = '/Path/to/yourDir/'
fileList = os.listdir(folder)

for f in fileList:
    filePath = folder + '/'+f

    if os.path.isfile(filePath):
        os.remove(filePath)

    Elif os.path.isdir(filePath):
        newFileList = os.listdir(filePath)
        for f1 in newFileList:
            insideFilePath = filePath + '/' + f1

            if os.path.isfile(insideFilePath):
                os.remove(insideFilePath)
2
Lalithesh

Ich empfehle die Verwendung von subprocess, wenn Sie einen schönen und lesbaren Code schreiben möchten:

import subprocess
subprocess.Popen("rm -r my_dir", Shell=True)

Und wenn Sie kein Softwareentwickler sind, sollten Sie Jupyter in Betracht ziehen. Sie können einfach Bash-Befehle eingeben:

!rm -r my_dir

Traditionell verwenden Sie shutil:

import shutil
shutil.rmtree(my_dir) 
0
Miladiouss