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?

python  glob 

Respuestas:


128

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



12

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


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

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


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

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

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')]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.