update instalar espaƱol descargar python linux

instalar - uninstall python linux



Ignorar caso en glob() en Linux (4)

Use expresiones regulares insensibles a mayúsculas y minúsculas en lugar de patrones glob. fnmatch.translate genera una expresión regular a partir de un patrón glob, por lo que

re.compile(fnmatch.translate(pattern), re.IGNORECASE)

le proporciona una versión insensible a mayúsculas y minúsculas de un patrón global como un RE compilado.

Tenga en cuenta que, si el sistema de archivos está alojado en una caja Linux en un sistema de archivos tipo Unix, los usuarios podrán crear archivos foo , Foo y FOO en el mismo directorio.

Estoy escribiendo un script que tendrá que funcionar en directorios que son modificados a mano por usuarios de Windows y Linux por igual. Los usuarios de Windows tienden a no preocuparse en absoluto por la asignación de nombres de archivos.

¿Hay alguna manera de manejar esto en el lado de Linux en Python, es decir, puedo obtener un comportamiento similar a un caso sin sensibilidad a las mayúsculas y minúsculas?


Puede reemplazar cada carácter alfabético c por [cC], a través de

import glob def insensitive_glob(pattern): def either(c): return ''[%s%s]''%(c.lower(),c.upper()) if c.isalpha() else c return glob.glob(''''.join(map(either,pattern)))


No recursivo

Para recuperar los archivos (y solo los archivos) de un directorio "ruta", con "globexpression":

list_path = [i for i in os.listdir(path) if os.path.isfile(os.path.join(path, i))] result = [os.path.join(path, j) for j in list_path if re.match(fnmatch.translate(globexpression), j, re.IGNORECASE)]

Recursivamente

con caminar:

result = [] for root, dirs, files in os.walk(path, topdown=True): result += [os.path.join(root, j) for j in files / if re.match(fnmatch.translate(globexpression), j, re.IGNORECASE)]

Mejor también compila la expresión regular, así que en lugar de

re.match(fnmatch.translate(globexpression)

do (antes del ciclo):

reg_expr = re.compile(fnmatch.translate(globexpression), re.IGNORECASE)

y luego reemplazar en el ciclo:

result += [os.path.join(root, j) for j in files if re.match(reg_expr, j)]


Dependiendo de su caso, puede usar .lower() en el patrón de archivo y los resultados de la lista de carpetas y solo luego comparar el patrón con el nombre del archivo