varios una todos script para los carpeta borrar archivos python

python - una - La forma más pirónica de eliminar un archivo que puede no existir



borrar varios archivos en linux (13)

¿Algo como esto? Aprovecha la evaluación de corto circuito. Si el archivo no existe, el condicional completo no puede ser verdadero, por lo que Python no se molestará en evaluar la segunda parte.

os.path.exists("gogogo.php") and os.remove("gogogo.php")

Quiero eliminar el filename del archivo si existe. Es apropiado decir

if os.path.exists(filename): os.remove(filename)

¿Hay alguna manera mejor? Una forma de una línea?


En Python 3.4 o versión posterior, la forma pythonic sería:

import os from contextlib import suppress with suppress(OSError): os.remove(filename)


En el espíritu de la respuesta de Andy Jones, ¿qué tal una auténtica operación ternaria?

os.remove(fn) if os.path.exists(fn) else None


La respuesta de Matt es la correcta para los Pythons más antiguos y la respuesta correcta de Kevin para los más nuevos.

Si no desea copiar la función para silentremove , esta funcionalidad se expone en path.py como remove_p :

from path import Path Path(filename).remove_p()


Otra forma de saber si el archivo (o archivos) existe, y eliminarlo, es usando el módulo glob.

from glob import glob import os for filename in glob("*.csv"): os.remove(filename)

Glob encuentra todos los archivos que podrían seleccionar el patrón con un comodín * nix, y recorre la lista.


Prefiero suprimir una excepción en lugar de verificar la existencia del archivo, para evitar un error TOCTTOU . La respuesta de Matt es un buen ejemplo de esto, pero podemos simplificarlo ligeramente en Python 3, usando contextlib.suppress() :

import contextlib with contextlib.suppress(FileNotFoundError): os.remove(filename)

Si filename es un objeto pathlib.Path lugar de una cadena, podemos llamar a su método .unlink() lugar de usar os.remove() . En mi experiencia, los objetos Path son más útiles que las cadenas para la manipulación de sistemas de archivos.

Dado que todo en esta respuesta es exclusivo de Python 3, proporciona otra razón para actualizar.


Una forma más pitónica sería:

try: os.remove(filename) except OSError: pass

Aunque esto toma aún más líneas y se ve muy feo, evita la llamada innecesaria a os.path.exists() y sigue la convención de python de sobreutilizar excepciones.

Puede valer la pena escribir una función para hacer esto por ti:

import os, errno def silentremove(filename): try: os.remove(filename) except OSError as e: # this would be "except OSError, e:" before Python 2.6 if e.errno != errno.ENOENT: # errno.ENOENT = no such file or directory raise # re-raise exception if a different error occurred


Una oferta de KISS:

def remove_if_exists(filename): if os.path.exists(filename): os.remove(filename)

Y entonces:

remove_if_exists("my.file")


Yo solo usaría shutil

import shutil shutil.rmtree(filename, ignore_errors=True)


os.remove se supone que funciona bien:

import os Input = input(''File:'') File = Input.get() try: os.remove(File) except: none



El siguiente enfoque solo funciona bajo sistemas Linux.

Me gusta usar rm que puede forzar la eliminación de archivos inexistentes con --preserve-root como una opción para rm .

--preserve-root do not remove `/'' (default)

rm --help | grep "force" -f, --force ignore nonexistent files and arguments, never prompt

También podemos usar safe-rm ( sudo apt-get install safe-rm )

Safe-rm es una herramienta de seguridad destinada a evitar la eliminación accidental de archivos importantes al reemplazar / bin / rm con un envoltorio, que verifica los argumentos dados contra una lista negra configurable de archivos y directorios que nunca deben eliminarse.

Primero verifico si existe la ruta de carpeta / archivo o no. Esto evitará configurar la variable fileToRemove / folderToRemove to the string -r / `.

import os os.environ[''fileToRemove''] = ''/home/user/fileName''; os.system(''[[ -f $fileToRemove ]] && rm -f --preserve-root $fileToRemove'') os.system(''[[ -f $fileToRemove ]] && safe-rm -f $fileToRemove'') # You can also delete a folder using: `rm -rf` or `safe-rm -rf` os.environ[''folderToRemove''] = ''/home/user/folderName''; os.system(''[[ -d $folderToRemove ]] && rm -rf --preserve-root $folderToRemove'') os.system(''[[ -d $folderToRemove ]] && safe-rm -rf $folderToRemove'')

Enfoque de Windows:

import os os.system(''del /F fileName.txt'')


if os.path.exists(filename): os.remove(filename)

es de una sola línea.

Muchos de ustedes pueden estar en desacuerdo, posiblemente por razones como considerar el uso propuesto de los ternarios "feo", pero esto plantea la cuestión de si debemos escuchar a las personas acostumbradas a los estándares feos cuando llaman a algo no estándar "feo".