python - recorrer - Eliminar un archivo o carpeta
python 3 eliminar archivo (10)
¿Cómo elimino un archivo o carpeta en Python?
Para Python 3, para eliminar el archivo y el directorio de forma individual, use los métodos de objeto pathlib.Path.rmdir y pathlib.Path.rmdir Path
respectivamente:
from pathlib import Path
dir_path = Path.home() / ''directory''
file_path = dir_path / ''file''
file_path.unlink() # remove file
dir_path.rmdir() # remove directory
Tenga en cuenta que también puede usar rutas relativas con objetos de Path
, y puede verificar su directorio de trabajo actual con Path.cwd
.
Para eliminar archivos y directorios individuales en Python 2, consulte la sección etiquetada a continuación.
Para eliminar un directorio con contenido, use shutil.rmtree
y tenga en cuenta que está disponible en Python 2 y 3:
from shutil import rmtree
rmtree(dir_path)
Demostración
Nuevo en Python 3.4 es el objeto Path
.
Usemos uno para crear un directorio y un archivo para demostrar el uso. Tenga en cuenta que usamos /
para unir las partes de la ruta, esto soluciona los problemas entre los sistemas operativos y los problemas del uso de barras invertidas en Windows (donde debería duplicar las barras invertidas como //
o usar cadenas en bruto, como 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()
y ahora:
>>> file_path.is_file()
True
Ahora vamos a eliminarlos. Primero el archivo:
>>> file_path.unlink() # remove file
>>> file_path.is_file()
False
>>> file_path.exists()
False
Podemos usar globbing para eliminar varios archivos. Primero, creamos algunos archivos para esto:
>>> (directory_path / ''foo.my'').touch()
>>> (directory_path / ''bar.my'').touch()
Luego simplemente iterar sobre el patrón global:
>>> 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
Ahora, demostrando eliminar el directorio:
>>> directory_path.rmdir() # remove directory
>>> directory_path.is_dir()
False
>>> directory_path.exists()
False
¿Qué pasa si queremos eliminar un directorio y todo lo que contiene? Para este caso de uso, use shutil.rmtree
Vamos a recrear nuestro directorio y archivo:
file_path.parent.mkdir()
file_path.touch()
y tenga en cuenta que rmdir
falla a menos que esté vacío, por lo que rmtree es tan conveniente:
>>> 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''
Ahora, importe rmtree y pase el directorio a la función:
from shutil import rmtree
rmtree(directory_path) # remove everything
Y podemos ver que todo ha sido eliminado:
>>> directory_path.exists()
False
Python 2
Si estás en Python 2, hay un pathlib2 , que se puede instalar con pip:
$ pip install pathlib2
Y luego puede alias la biblioteca a pathlib
import pathlib2 as pathlib
O simplemente importe directamente el objeto Path
(como se muestra aquí):
from pathlib2 import Path
Si eso es demasiado, puede eliminar archivos con os.remove
o os.unlink
from os import unlink, remove
from os.path import join, expanduser
remove(join(expanduser(''~''), ''directory/file''))
o
unlink(join(expanduser(''~''), ''directory/file''))
y puedes eliminar directorios con os.rmdir
:
from os import rmdir
rmdir(join(expanduser(''~''), ''directory''))
Tenga en cuenta que también hay un os.removedirs
: solo elimina los directorios vacíos de forma recursiva, pero puede adaptarse a su caso de uso.
¿Cómo eliminar un archivo o carpeta en Python?
Para borrar archivos:
os.unlink(path, *, dir_fd=None)
O
os.remove(path, *, dir_fd=None)
Esta función elimina (borra) la ruta del archivo. Si la ruta es un directorio, se OSError
.
En Python 2, si la ruta no existe, se OSError
con [Errno 2] ( ENOENT
). En Python 3, FileNotFoundError
con [Errno 2] ( ENOENT
) se ENOENT
. En Python 3, dado que FileNotFoundError
es una subclase de OSError
, la captura de este último capturará la primera.
Para borrar carpetas:
os.rmdir(path, *, dir_fd=None)
rmdir
Eliminar (eliminar) la ruta del directorio. Solo funciona cuando el directorio está vacío, de lo contrario, se OSError . Para eliminar árboles de directorios completos, se puede utilizar shutil.rmtree()
.
shutil.rmtree(path, ignore_errors=False, onerror=None)
shutil.rmtree
Eliminar un árbol de directorios completo. La ruta debe apuntar a un directorio (pero no un enlace simbólico a un directorio).
Si ignore_errors es verdadero, los errores resultantes de eliminaciones fallidas se ignorarán y si son falsos u omitidos, dichos errores se manejan llamando a un controlador especificado por onerror o, si se omite, provocan una excepción.
Ver también:
os.removedirs(name)
os.removedirs(name)
Eliminar directorios de forma recursiva. Funciona como rmdir () excepto que, si el directorio de hoja se elimina exitosamente, removeirs () intenta eliminar sucesivamente cada directorio principal mencionado en la ruta hasta que se genere un error (que se ignora, porque generalmente significa que un directorio principal no está vacío) ).
Por ejemplo, os.removedirs (''foo / bar / baz'') primero eliminará el directorio ''foo / bar / baz'', y luego eliminará ''foo / bar'' y ''foo'' si están vacíos.
Sintaxis de Python para borrar un archivo.
import os
os.remove("/tmp/<file_name>.txt")
O
import os
os.unlink("/tmp/<file_name>.txt")
Mejores prácticas
- Primero, verifique si el archivo o carpeta existe o no, luego solo elimine ese archivo. Esto puede lograrse de dos formas :
a.os.path.isfile("/path/to/file")
segundo. Utilice elexception handling.
EJEMPLO para 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)
Manejo de excepciones
#!/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))
SALIDA RESPECTIVA
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
Sintaxis de Python para borrar una carpeta.
shutil.rmtree()
Ejemplo para 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))
Crea una función para ustedes.
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))
Puede usar el módulo pathlib
(requiere Python 3.4+, pero hay versiones pathlib
para versiones anteriores en PyPI: pathlib
, pathlib2
).
Para eliminar un archivo existe el método de unlink
:
import pathlib
path = pathlib.Path(name_of_file)
path.unlink()
O el método rmdir
para eliminar una carpeta vacía :
import pathlib
path = pathlib.Path(name_of_folder)
path.rmdir()
Recomiendo usar subprocess
si escribir un código hermoso y legible es su taza de té:
import subprocess
subprocess.Popen("rm -r my_dir", shell=True)
Y si no eres un ingeniero de software, entonces considera usar Jupyter; simplemente puede escribir comandos bash:
!rm -r my_dir
Tradicionalmente, usas shutil
:
import shutil
shutil.rmtree(my_dir)
Utilizar
shutil.rmtree(path[, ignore_errors[, onerror]])
(Ver documentación completa sobre shutil ) y / o
os.remove
y
os.rmdir
(Documentación completa en os.remove() .)
shutil.rmtree es la función asíncrona, por lo que si desea verificar cuando se complete, puede usar while ... loop
import os
import shutil
shutil.rmtree(path)
while os.path.exists(path):
pass
print(''done'')
os.remove()
elimina un archivo.
os.rmdir()
elimina un directorio vacío.
shutil.rmtree()
borra un directorio y todos sus contenidos.
pathlib.Path.unlink()
elimina el archivo o enlace simbólico.
pathlib.Path.unlink() elimina el directorio vacío.
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)