recursively recursive from files filename python path wildcard

from - python glob recursive



Usar comodín con os.path.isfile() (6)

Me gustaría comprobar si hay algún archivo .rar en un directorio. no necesita ser recursivo

Usar comodín con os.path.isfile () fue mi mejor suposición, pero no funciona. ¿Qué puedo hacer entonces?

Gracias.


glob es lo que necesitas.

>>> import glob >>> glob.glob(''*.rar'') # all rar files within the directory, in this case the current working one

os.path.isfile() devuelve True si una ruta es un archivo regular existente. Entonces eso se usa para verificar si un archivo ya existe y no admite comodines. glob hace.


Los comodines se expanden por shell y, por lo tanto, no se puede usar con os.path.isfile ()

Si desea utilizar comodines, puede usar popen with shell = True o os.system()

>>> import os >>> os.system(''ls'') aliases.sh default_bashprofile networkhelpers projecthelper.old pythonhelpers virtualenvwrapper_bashrc 0 >>> os.system(''ls *.old'') projecthelper.old 0

También podría obtener el mismo efecto con el módulo glob.

>>> import glob >>> glob.glob(''*.old'') [''projecthelper.old''] >>>


import os [x for x in os.listdir("your_directory") if len(x) >= 4 and x[-4:] == ".rar"]


iglob es mejor que glob aquí ya que en realidad no quiere la lista completa de archivos rar, pero solo quiere comprobar que existe un rar


Si solo le importa si existe al menos un archivo y no desea una lista de los archivos:

import glob import os def check_for_files(filepath): for filepath_object in glob.glob(filepath): if os.path.isfile(filepath_object): return True return False


Sin utilizar os.path.isfile() , no sabrá si los resultados devueltos por glob() son archivos o subdirectorios, por lo que debe intentar algo como esto:

import fnmatch import os def find_files(base, pattern): ''''''Return list of files matching pattern in base folder.'''''' return [n for n in fnmatch.filter(os.listdir(base), pattern) if os.path.isfile(os.path.join(base, n))] rar_files = find_files(''somedir'', ''*.rar'')

También puede filtrar los resultados devueltos por glob() si lo desea, y eso tiene la ventaja de hacer algunas cosas adicionales relacionadas con Unicode y similares. Compruebe la fuente en glob.py si es importante.

[n for n in glob(pattern) if os.path.isfile(n)]