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?

python  glob 

Antworten:


123

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



12

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


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

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


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

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

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')]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.