Me gustaría comprobar si hay algún archivo .rar en un directorio. no necesita ser recursivoUsar comodín con os.path.isfile()
Usar comodín con os.path.isfile() fue mi mejor suposición, pero no funciona. ¿Qué puedo hacer entonces?
Gracias.
Me gustaría comprobar si hay algún archivo .rar en un directorio. no necesita ser recursivoUsar comodín con os.path.isfile()
Usar comodín con os.path.isfile() fue mi mejor suposición, pero no funciona. ¿Qué puedo hacer entonces?
Gracias.
comodines se expanden por Shell y por lo tanto no se puede utilizar con os.path.isfile()
Si desea utilizar comodines, se 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']
>>>
glob es lo que necesita.
>>> import glob
>>> glob.glob('*.rar') # all rar files within the directory, in this case the current working one
os.path.isfile()
vuelve True
si un camino es un archivo normal existente. Entonces eso se usa para verificar si un archivo ya existe y no admite comodines. glob
hace.
1 sólo me ganó de mano mientras yo estaba tratando de sacar una respuesta completa. – pyfunc
Desafortunadamente, sin usar os.path.isfile() para verificar los resultados, aún no se sabe si lo que ha encontrado son directorios o archivos. –
import os
[x for x in os.listdir("your_directory") if len(x) >= 4 and x[-4:] == ".rar"]
Sin utilizar os.path.isfile()
que no se sabe si los resultados devueltos por glob()
son archivos o subdirectorios, por lo que intentar algo como esto en su lugar:
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 puedes, simplemente filtrar los resultados devueltos por glob()
si lo desea, y 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)]
Cuando dices "esto tiene la ventaja", ¿te refieres a que 'glob' tiene la ventaja o que' fnmatch' tiene la ventaja? –
@RichardCorden, lo reformulé para aclarar que el glob tiene la ventaja allí. –
iglob es mejor que el pegote aquí, ya que en realidad no quiere que la lista completa de los archivos rar, pero sólo quieren comprobar que existe una rar
Si bien esto es realmente cierto, esta respuesta se beneficiaría de una explicación más detallada. La diferencia es que 'iglob' devuelve un iterador, por lo que si lo llamas una vez y devuelve algo, sabes que hubo al menos una coincidencia. – tripleee
Si sólo se preocupa por 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
debe aceptar una respuesta a esta pregunta ... – GreenAsJade