¿Cómo eliminar un archivo o carpeta en Python?
python
file-io
directory
delete-file
Zygimantas
fuente
fuente
os.remove()
lanza una excepción, por lo que puede ser necesario verificaros.path.isfile()
primero o envolver en untry
.os.remove()
si un archivo no existe esFileNotFoundError
.os.remove()
Toma múltiples argumentos para eliminar múltiples archivos, o lo llama cada vez para cada archivo?Sintaxis de Python para borrar un archivo
O
O
Biblioteca pathlib para Python versión> 3.5
Path.unlink (missing_ok = False)
Método de desvinculación utilizado para eliminar el archivo o el enlace simbólico.
Mejores prácticas
a.
os.path.isfile("/path/to/file")
si. Utilizar
exception handling.
EJEMPLO para
os.path.isfile
Manejo de excepciones
SALIDA RESPECTIVA
Sintaxis de Python para eliminar una carpeta
Ejemplo para
shutil.rmtree()
fuente
Utilizar
(Consulte la documentación completa sobre shutil ) y / o
y
(Documentación completa en os .)
fuente
Aquí hay una función robusta que usa ambos
os.remove
yshutil.rmtree
:fuente
remove(path);
llamada ISO C.os.path.islink(file_path):
un error, debería seros.path.islink(path):
Puede utilizar la incorporada en el
pathlib
módulo (requiere Python 3.4+, pero hay backports para versiones anteriores en PyPI:pathlib
,pathlib2
).Para eliminar un archivo existe el
unlink
método:O el
rmdir
método para eliminar una carpeta vacía :fuente
pathlib
que pueda manejar la eliminación de directorios no vacíos. Sin embargo, podrías usarshutil.rmtree
. Se ha mencionado en varias de las otras respuestas, así que no lo he incluido.Para Python 3, para eliminar el archivo y el directorio individualmente, use los métodos
unlink
y objeto respectivamente:rmdir
Path
Tenga en cuenta que también puede usar rutas relativas con
Path
objetos, y puede verificar su directorio de trabajo actual conPath.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:Demostración
Nuevo en Python 3.4 es el
Path
objeto.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 necesitaría duplicar las barras invertidas\\
o usar cadenas sin procesar, comor"foo\bar"
):y ahora:
Ahora vamos a eliminarlos. Primero el archivo:
Podemos usar globbing para eliminar varios archivos; primero, creemos algunos archivos para esto:
Luego solo itera sobre el patrón glob:
Ahora, demostrando la eliminación del directorio:
¿Qué pasa si queremos eliminar un directorio y todo lo que contiene? Para este caso de uso, use
shutil.rmtree
Recreemos nuestro directorio y archivo:
y tenga en cuenta que
rmdir
falla a menos que esté vacío, razón por la cual rmtree es tan conveniente:Ahora, importe rmtree y pase el directorio a la función:
y podemos ver que todo se ha eliminado:
Python 2
Si está en Python 2, hay un backport del módulo pathlib llamado pathlib2 , que se puede instalar con pip:
Y luego puedes alias la biblioteca para
pathlib
O simplemente importe directamente el
Path
objeto (como se demuestra aquí):Si eso es demasiado, puede eliminar archivos con
os.remove
oos.unlink
o
y puedes eliminar directorios con
os.rmdir
:Tenga en cuenta que también hay un
os.removedirs
: solo elimina directorios vacíos de forma recursiva, pero puede adaptarse a su caso de uso.fuente
rmtree(directory_path)
funciona en python 3.6.6 pero no en python 3.5.2:rmtree(str(directory_path)))
allí lo necesita .fuente
shutil.rmtree es la función asincrónica, por lo que si desea verificar cuándo se completa, puede usar while ... loop
fuente
shutil.rmtree
No se supone que sea asíncrono. Sin embargo, puede parecer que está en Windows con los escáneres de virus que interfieren.Para borrar archivos:
o
Ambas funciones son semánticamente iguales. Esta función elimina (elimina) la ruta del archivo. Si la ruta no es un archivo y es un directorio, se genera una excepción.
Para eliminar carpetas:
o
Para eliminar árboles de directorios completos,
shutil.rmtree()
se puede utilizar.os.rmdir
solo funciona cuando el directorio está vacío y existe.Para eliminar carpetas recursivamente hacia padres:
Elimina cada directorio padre vacío con self hasta el padre que tiene algún contenido
Para obtener más información cheque documento oficial:
os.unlink
,os.remove
,os.rmdir
,shutil.rmtree
,os.removedirs
fuente
Para eliminar todos los archivos en la carpeta
Para eliminar todas las carpetas en un directorio
fuente
Para evitar el problema TOCTOU resaltado por el comentario de Éric Araujo , puede detectar una excepción para llamar al método correcto:
Dado
shutil.rmtree()
que solo eliminará directorios y /os.remove()
oos.unlink()
solo eliminará archivos.fuente
shutil.rmtree()
elimina no solo el directorio sino también su contenido.Recomiendo usar
subprocess
si escribir un código hermoso y legible es su taza de té:Y si no eres un ingeniero de software, entonces quizás consideres usar Jupyter; simplemente puede escribir comandos bash:
Tradicionalmente, usas
shutil
:fuente
subprocess
para esto.shutil.rmtree
funcionarm -r
bien, con la ventaja adicional de trabajar en Windows.