Vraag Verwijder een bestand of map


Hoe een bestand of map in Python verwijderen?


1448
2017-08-09 13:05


oorsprong


antwoorden:


os.remove() zal een bestand verwijderen.

os.rmdir() zal een lege map verwijderen.

shutil.rmtree() zal een map en de gehele inhoud ervan verwijderen.


2342
2017-08-09 13:07



Python-syntaxis om een ​​bestand te verwijderen

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

Of

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

Beste oefening

  1. Controleer eerst of het bestand of de map bestaat of niet en verwijder alleen dat bestand. Dit kan op twee manieren worden bereikt:
    een. os.path.isfile("/path/to/file")
    b. Gebruik exception handling.

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

Afhandeling van uitzonderingen

#!/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))

RESPECTIEVE OUTPUT

Voer de bestandsnaam in om te verwijderen: demo.txt
Fout: demo.txt - geen bestand of map.

Voer de bestandsnaam in om te verwijderen: rrr.txt
Fout: rrr.txt - bewerking niet toegestaan.

Voer de bestandsnaam in om te verwijderen: foo.txt

Python-syntaxis om een ​​map te verwijderen

shutil.rmtree()

Voorbeeld voor 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



Gebruik

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

(Zie volledige documentatie op shutil) en / of

os.remove

en

os.rmdir

(Volledige documentatie over os.)


61
2017-08-09 13:09



Voor het verwijderen van bestanden:

Je kunt gebruiken unlink of remove.

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

Of

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

Deze functie verwijdert (verwijdert) het bestandspad. Als pad een map is, OSError is opgevoed.

In Python 2, als het pad niet bestaat, OSError met [Errno 2] (ENOENT) is verhoogd. In Python 3, FileNotFoundError met [Errno 2] (ENOENT) is verhoogd. In Python 3, omdat FileNotFoundError is een subklasse van OSError, het vangen van de laatste zal de eerste opvangen.

Voor het verwijderen van mappen:

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

rmdir Verwijder het pad van de map (verwijderen). Werkt alleen als de map leeg is, anders OSError is opgevoed. Om hele mappen te verwijderen, shutil.rmtree() kan worden gebruikt.

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

shutil.rmtree Verwijder een volledige mappenboom. Pad moet naar een map verwijzen (maar geen symbolische link naar een map).

Als ignore_errors waar is, worden fouten als gevolg van mislukte verwijderingen genegeerd en als deze fout of weggelaten zijn, worden dergelijke fouten afgehandeld door een handler op te roepen die is opgegeven met onerror of, als dat wordt weggelaten, wordt een uitzondering gegenereerd.

Zie ook:

os.removedirs(name)

os.removedirs(name) Verwijder mappen recursief. Werkt als rmdir () behalve dat, als de bladdirectory met succes is verwijderd, removeirs () probeert elke achterliggende bovenvermelde ouderdirectory achtereenvolgens te verwijderen totdat er een fout optreedt (wat wordt genegeerd omdat het meestal betekent dat een bovenliggende map niet leeg is) ).

Os.removedirs ('foo / bar / baz') zal bijvoorbeeld eerst de map 'foo / bar / baz' verwijderen en 'foo / bar' en 'foo' verwijderen als ze leeg zijn.


50
2017-08-22 12:22



Maak een functie voor jullie.

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



U kunt de ingebouwde gebruiken pathlib module (vereist Python 3.4+, maar er zijn backports voor oudere versies op PyPI: pathlib, pathlib2).

Om een ​​bestand te verwijderen, is er de unlink methode:

import pathlib
path = pathlib.Path(name_of_file)
path.unlink()

Of de rmdir methode om een ​​te verwijderen leeg map:

import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()

17
2017-08-06 20:10



Hoe verwijder ik een bestand of map in Python?

Voor Python 3, om het bestand en de map afzonderlijk te verwijderen, gebruikt u de unlink en rmdir  Path objectmethoden respectievelijk:

from pathlib import Path
dir_path = Path.home() / 'directory' 
file_path = dir_path / 'file'

file_path.unlink() # remove file

dir_path.rmdir()   # remove directory

Merk op dat u ook relatieve paden kunt gebruiken met Path objecten, en u kunt uw huidige werkmap controleren met Path.cwd.

Voor het verwijderen van individuele bestanden en mappen in Python 2, zie de sectie die hieronder is aangegeven.

Gebruik. Om een ​​map met inhoud te verwijderen shutil.rmtreeen merk op dat dit beschikbaar is in Python 2 en 3:

from shutil import rmtree

rmtree(dir_path)

Demonstratie

Nieuw in Python 3.4 is de Path voorwerp.

Laten we er een gebruiken om een ​​map en een bestand te maken om het gebruik te demonstreren. Merk op dat we de / om deel te nemen aan het pad, werkt dit rond problemen tussen besturingssystemen en problemen met het gebruik van backslashes op Windows (waarbij u uw backslashes moet verdubbelen, zoals \\ of gebruik ruwe tekenreeksen, zoals 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()

en nu:

>>> file_path.is_file()
True

Laten we ze nu verwijderen. Eerst het bestand:

>>> file_path.unlink()     # remove file
>>> file_path.is_file()
False
>>> file_path.exists()
False

We kunnen globbing gebruiken om meerdere bestanden te verwijderen - laten we eerst een paar bestanden hiervoor maken:

>>> (directory_path / 'foo.my').touch()
>>> (directory_path / 'bar.my').touch()

Herhaal dan gewoon het glob-patroon:

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

Nu, demonstreren het verwijderen van de map:

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

Wat als we een directory en alles daarin willen verwijderen? Gebruik voor deze use-case shutil.rmtree

Laten we onze map en bestand opnieuw maken:

file_path.parent.mkdir()
file_path.touch()

en merk dat op rmdir mislukt tenzij het leeg is, daarom is rmtree zo handig:

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

Importeer nu rmtree en geef de map door aan de functie:

from shutil import rmtree
rmtree(directory_path)      # remove everything 

en we kunnen zien dat het hele ding is verwijderd:

>>> directory_path.exists()
False

Python 2

Als je met Python 2 werkt, is er een backport van de pathlib module genaamd pathlib2, die met pip kan worden geïnstalleerd:

$ pip install pathlib2

En dan kun je de bibliotheek een alias geven pathlib

import pathlib2 as pathlib

Of importeer gewoon het Path object (zoals hier aangetoond):

from pathlib2 import Path

Als dat te veel is, kunt u bestanden verwijderen met os.remove of os.unlink

from os import unlink, remove
from os.path import join, expanduser

remove(join(expanduser('~'), 'directory/file'))

of

unlink(join(expanduser('~'), 'directory/file'))

en je kunt mappen verwijderen met os.rmdir:

from os import rmdir

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

Merk op dat er ook een is os.removedirs - het verwijdert alleen lege mappen recursief, maar het kan geschikt zijn voor uw use-case.


7
2018-02-12 01:44



shutil.rmtree is de asynchrone functie, dus als je wilt weten wanneer het voltooid is, kun je while ... loop gebruiken

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



Ik raad aan om te gebruiken subprocess als het schrijven van een mooie en leesbare code jouw ding is:

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

En als u geen software-engineer bent, overweeg dan misschien om Jupyter te gebruiken; je kunt simpelweg bash commando's typen:

!rm -r my_dir

Traditioneel gebruik je shutil:

import shutil
shutil.rmtree(my_dir) 

0
2018-05-30 23:11