Python Glob sin la ruta completa, solo el nombre del archivo

82

¿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?


fuente

Respuestas:

128

Úselo os.path.basename(path)para obtener el nombre del archivo.

Tom Zych
fuente
112

Esto podría ayudar a alguien:

names = [os.path.basename(x) for x in glob.glob('/your_path')]

Anastasios Andronidis
fuente
12

Utilice glob en combinación con os.path.basename.

orlp
fuente
2
map(os.path.basename, glob.glob("your/path"))

Devuelve un iterable con todos los nombres y extensiones de archivo.

Víctor Navarro
fuente
1

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
rinkush sharda
fuente
Ha mezclado los nombres de sus variables: absoluto significa ruta completa; relativo significa solo el nombre base.
omatai
0

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
turtlemonvh
fuente
0

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')]
rajat prakash
fuente