Python Glob ohne den gesamten Pfad - nur den Dateinamen

80

Gibt es eine Möglichkeit, Glob in einem Verzeichnis zu verwenden, um Dateien mit einer bestimmten Erweiterung abzurufen, aber nur den Dateinamen selbst, nicht den gesamten Pfad?


quelle

Antworten:

123

Verwenden Sie os.path.basename(path), um den Dateinamen abzurufen.

Tom Zych
quelle
110

Dies könnte jemandem helfen:

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

Anastasios Andronidis
quelle
12

Verwenden Sie glob in Kombination mit os.path.basename.

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

Gibt eine Iterable mit allen Dateinamen und Erweiterungen zurück.

Víctor Navarro
quelle
1

os.path.basename funktioniert bei mir.

Hier ist ein Codebeispiel:

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)

Ausgabe :

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
quelle
Sie haben Ihre Variablennamen verwechselt: absolut bedeutet vollständiger Pfad; relativ bedeutet nur den Basisnamen.
Omatai
0

Ich schreibe die Lösung für relatives Globbing immer wieder neu (insbesondere, wenn ich einer Zip-Datei Elemente hinzufügen muss) - so sieht sie normalerweise aus.

# 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
quelle
0

Wenn Sie nach einer CSV-Datei suchen:

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

Wenn Sie nach einer EXCEL-Datei suchen:

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