¿Hay alguna forma de que pueda usar glob en un directorio para obtener archivos con una extensión específica, pero solo el nombre del archivo en sí, no la ruta completa?
82
Úselo os.path.basename(path)
para obtener el nombre del archivo.
Esto podría ayudar a alguien:
names = [os.path.basename(x) for x in glob.glob('/your_path')]
Utilice glob en combinación con os.path.basename
.
map(os.path.basename, glob.glob("your/path"))
Devuelve un iterable con todos los nombres y extensiones de archivo.
os.path.basename funciona para mí.
Aquí está el ejemplo de código:
import sys,glob
import os
expectedDir = sys.argv[1] ## User input for directory where files to search
for fileName_relative in glob.glob(expectedDir+"**/*.txt",recursive=True): ## first get full file name with directores using for loop
print("Full file name with directories: ", fileName_relative)
fileName_absolute = os.path.basename(fileName_relative) ## Now get the file name with os.path.basename
print("Only file name: ", fileName_absolute)
Salida:
Full file name with directories: C:\Users\erinksh\PycharmProjects\EMM_Test2\venv\Lib\site-packages\wheel-0.33.6.dist-info\top_level.txt
Only file name: top_level.txt
Sigo reescribiendo la solución para el globbing relativo (especialmente cuando necesito agregar elementos a un archivo zip); esto es lo que generalmente termina pareciendo.
# Function def rel_glob(pattern, rel): """glob.glob but with relative path """ for v in glob.glob(os.path.join(rel, pattern)): yield v[len(rel):].lstrip("/") # Use # For example, when you have files like: 'dir1/dir2/*.py' for p in rel_glob("dir2/*.py", "dir1"): # do work pass
fuente
Si está buscando un archivo CSV:
file = [os.path.basename(x) for x in glob.glob(r'C:\Users\rajat.prakash\Downloads//' + '*.csv')]
Si está buscando un archivo EXCEL:
file = [os.path.basename(x) for x in glob.glob(r'C:\Users\rajat.prakash\Downloads//' + '*.xlsx')]
fuente