Dado un directorio como una cadena, ¿cómo puedo saber si un archivo existe en él?

os.path.isFile()       # only accepts a specific file path
os.listdir(dir) == []  # accepts sub-directories

Mi objetivo es comprobar si una ruta está desprovisto de sólo los archivos (no sub-directorios demasiado).

  • En la práctica algo como esto rara vez es necesario, ya que un escrito correctamente bucle para procesar todos los archivos de interés en un directorio que se acaba de recorrer 0 veces si no hay ninguna. Desea usted puede contar en el bucle y después, si echa de ver cómo muchos, si alguna, fueron procesados.
InformationsquelleAutor meestaman | 2015-11-01

1 Comentario

  1. 11

    A la marca sólo un directorio específico, una solución de este tipo sería suficiente:

    from os import listdir
    from os.path import isfile, join
    
    def does_file_exist_in_dir(path):
        return any(isfile(join(path, i)) for i in listdir(path))

    Para diseccionar lo que está sucediendo:

    • El método does_file_exist_in_dir va a tomar su camino.
    • Utilizando cualquier devolverá True si se encuentra un archivo por iteración a través de los contenidos de su camino, llamando a un listdir en él. Nota el uso de únete para la ruta de acceso con el fin de proporcionar una calificado ruta de acceso del archivo de nombre para verificar correctamente.

    Como una opción, si desea recorrer a través de todos los sub-directorios de un camino y de verificación de los archivos, puede utilizar os.a pie y acaba de comprobar para ver si el nivel está en contiene los archivos de este tipo:

    for dir, sub_dirs, files in os.walk(path):
        if not files:
            print("no files at this level")
    • Hay un error for file in files print "as"
    • os.a pie() va a ir a través de todos los sub-directorios. Sólo estoy buscando una ruta dada
    • Yo estaba en realidad en el proceso de poner juntos una solución para exactamente eso. Sostienen. 🙂
    • Dulce! Gracias 🙂
    • Solución actualizado.
    • Gracias idjaw. Funciona de maravilla!
    • saludos. 🙂
    • Parece any_files = len(glob.glob(os.path.join(dir_path, '*.*'))) > 0 sería suficiente.
    • Yo estaba pensando en glob demasiado, pero por desgracia eso no funcionaría si tenía un nombre de archivo sin un ‘.’

Dejar respuesta

Please enter your comment!
Please enter your name here