Python Glob без всего пути - только имя файла

Есть ли способ использовать glob в каталоге для получения файлов с определенным расширением, но только с именем самого файла, а не с полным путем?


person Community    schedule 07.09.2011    source источник


Ответы (8)


Используйте os.path.basename(path), чтобы получить имя файла.

person Tom Zych    schedule 07.09.2011

Это может кому-то помочь:

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

person Anastasios Andronidis    schedule 04.12.2013

Используйте glob в сочетании с os.path.basename.

person orlp    schedule 07.09.2011

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

Возвращает итерацию со всеми именами файлов и расширениями.

person Víctor Navarro    schedule 15.01.2020

Я продолжаю переписывать решение для относительного глобализации (особенно, когда мне нужно добавить элементы в zip-файл) - это то, на что обычно это похоже.

# 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
person turtlemonvh    schedule 15.08.2019

os.path.basename работает для меня.

Вот пример кода:

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)

Вывод:

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
person rinkush sharda    schedule 16.10.2019
comment
Вы перепутали имена переменных: абсолютный означает полный путь; относительный означает только базовое имя. - person omatai; 30.04.2020

Если вы ищете файл CSV:

file = [os.path.basename(x) for x in glob.glob(r'C:\Users\rajat.prakash\Downloads//' + '*.csv')]

Если вы ищете файл EXCEL:

file = [os.path.basename(x) for x in glob.glob(r'C:\Users\rajat.prakash\Downloads//' + '*.xlsx')]
person rajat prakash    schedule 25.07.2020

for f in glob.glob(gt_path + "/*.png"):  # find all png files
      exc_name = f.split('/')[-1].split(',')[0]

Тогда exc_name похож на myphoto.png

person Nice    schedule 16.07.2021