Python Glob bez całej ścieżki - tylko nazwa pliku

83

Czy istnieje sposób, w jaki mogę użyć globu w katalogu, aby uzyskać pliki z określonym rozszerzeniem, ale tylko samą nazwą pliku, a nie całą ścieżką?


źródło

Odpowiedzi:

128

Użyj, os.path.basename(path)aby uzyskać nazwę pliku.

Tom Zych
źródło
113

To może pomóc komuś:

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

Anastasios Andronidis
źródło
12

Użyj glob w połączeniu z os.path.basename.

orlp
źródło
3
map(os.path.basename, glob.glob("your/path"))

Zwraca iterowalność ze wszystkimi nazwami plików i rozszerzeniami.

Víctor Navarro
źródło
1

Os.path.basename działa dla mnie.

Oto przykład kodu:

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)

Wynik :

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
źródło
Pomieszałeś nazwy zmiennych: bezwzględna oznacza pełną ścieżkę; Względny oznacza tylko nazwę podstawową.
omatai
0

Ciągle przepisuję rozwiązanie dla względnego globowania (zwłaszcza gdy muszę dodać elementy do pliku zip) - tak zwykle kończy się to.

# 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
źródło
0

Jeśli szukasz pliku CSV:

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

Jeśli szukasz pliku EXCEL:

file = [os.path.basename(x) for x in glob.glob(r'C:\Users\rajat.prakash\Downloads//' + '*.xlsx')]
rajat prakash
źródło