Frage Löschen Sie eine Datei oder einen Ordner


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


1448
2017-08-09 13:05


Ursprung


Antworten:


os.remove() wird eine Datei entfernen.

os.rmdir() Entfernt ein leeres Verzeichnis.

shutil.rmtree() löscht ein Verzeichnis und alle seine Inhalte.


2342
2017-08-09 13:07



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 oder nicht, und löschen Sie dann nur diese Datei. Dies kann auf zwei Arten erreicht werden:
    ein. os.path.isfile("/path/to/file")
    b. Benutzen exception handling.

BEISPIEL zum 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))

RESPEKTIVE AUSGABE

Geben Sie den zu löschenden Dateinamen ein: demo.txt
Fehler: demo.txt - Keine solche Datei oder Verzeichnis.

Geben Sie den zu löschenden Dateinamen ein: rrr.txt
Fehler: rrr.txt - Operation nicht erlaubt.

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))

101
2018-03-07 06:37



Benutzen

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

(Siehe vollständige Dokumentation auf Shut) und / oder

os.remove

und

os.rmdir

(Vollständige Dokumentation zu os.)


61
2017-08-09 13:09



Zum Löschen von Dateien:

Sie können verwenden unlink oder remove.

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

Oder

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

Diese Funktion entfernt (löscht) den Dateipfad. Wenn der Pfad ein Verzeichnis ist, OSError ist erhöht.

Wenn der Pfad in Python 2 nicht existiert, OSError mit [Errno 2] (ENOENT) wird ausgelöst. In Python 3, FileNotFoundError mit [Errno 2] (ENOENT) wird ausgelöst. In Python 3, weil FileNotFoundError ist eine Unterklasse von OSErrorDas Fangen des Letzteren wird Ersteres fangen.

Zum Löschen von Ordnern:

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

rmdir Entfernen (löschen) Sie den Verzeichnispfad. Funktioniert nur, wenn das Verzeichnis leer ist. OSError ist erhöht. Um ganze Verzeichnisbäume zu entfernen, shutil.rmtree() kann verwendet werden.

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

shutil.rmtree Löschen Sie eine gesamte Verzeichnisstruktur. Pfad muss auf ein Verzeichnis zeigen (aber keine symbolische Verknüpfung zu einem Verzeichnis).

Wenn ignore_errors auf true gesetzt ist, werden Fehler aufgrund von fehlgeschlagenen Löschvorgängen ignoriert, und wenn false oder ausgelassen werden, werden solche Fehler durch Aufrufen eines durch onerror angegebenen Handlers behandelt. Wenn dies nicht der Fall ist, wird eine Ausnahme ausgelöst.

Siehe auch:

os.removedirs(name)

os.removedirs(name) Entfernen Sie Verzeichnisse rekursiv. Funktioniert wie rmdir () mit der Ausnahme, dass, wenn das Blattverzeichnis erfolgreich entfernt wurde, removedirs () versucht, jedes im Pfad angegebene übergeordnete Verzeichnis sukzessive zu entfernen, bis ein Fehler auftritt (was ignoriert wird, weil es im Allgemeinen bedeutet, dass ein übergeordnetes Verzeichnis nicht leer ist) ).

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


50
2017-08-22 12:22



Erstelle 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))

22
2018-01-22 09:40



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

Um eine Datei zu entfernen, 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()

17
2017-08-06 20:10



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

Verwenden Sie für Python 3 die Datei und das Verzeichnis einzeln, um sie zu entfernen unlink und rmdir  Path Objektmethoden jeweils:

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 in dem Abschnitt, der unten aufgeführt ist.

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

Erstellen wir ein Verzeichnis und eine Datei, um die Verwendung zu demonstrieren. Beachten Sie, dass wir das verwenden / Um die Teile des Pfades zu verbinden, funktioniert dies um Probleme zwischen Betriebssystemen und Problemen durch die Verwendung von Backslashes unter Windows (wo Sie Ihre Backslashes entweder verdoppeln müssten \\ oder verwende rohe Strings, 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 wollen wir sie löschen. 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 iteriere 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

Jetzt demonstrieren Sie das Entfernen des Verzeichnisses:

>>> directory_path.rmdir() # remove directory
>>> directory_path.is_dir()
False
>>> directory_path.exists()
False

Was, wenn wir ein Verzeichnis und alles darin entfernen wollen? Verwenden Sie für diesen Anwendungsfall shutil.rmtree

Lassen Sie uns unser Verzeichnis und die 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 bequem 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 jetzt rmtree und übergeben Sie das Verzeichnis an die Funktion:

from shutil import rmtree
rmtree(directory_path)      # remove everything 

und wir können sehen, dass die ganze Sache entfernt wurde:

>>> directory_path.exists()
False

Python 2

Wenn Sie auf Python 2 sind, gibt es ein Backport des Pathlib-Moduls pathlib2, die mit pip installiert werden kann:

$ pip install pathlib2

Und dann kannst du die Bibliothek zu Alias ​​machen 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 ein os.removedirs - Es entfernt nur leere Verzeichnisse rekursiv, aber es kann Ihrem Anwendungsfall entsprechen.


7
2018-02-12 01:44



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

import os
import shutil

shutil.rmtree(path)

while os.path.exists(path):
  pass

print('done')

3
2018-03-23 17:08



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
2017-10-25 12:49



Ich empfehle die Verwendung subprocess Wenn du einen schönen und lesbaren Code schreibst, ist deine Tasse Tee:

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

Und wenn Sie kein Softwareentwickler sind, dann sollten Sie vielleicht Jupyter verwenden; Sie können einfach bash Befehle eingeben:

!rm -r my_dir

Traditionell benutzt du shutil:

import shutil
shutil.rmtree(my_dir) 

0
2018-05-30 23:11