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?
80
Verwenden Sie os.path.basename(path)
, um den Dateinamen abzurufen.
Dies könnte jemandem helfen:
names = [os.path.basename(x) for x in glob.glob('/your_path')]
Verwenden Sie glob in Kombination mit os.path.basename
.
map(os.path.basename, glob.glob("your/path"))
Gibt eine Iterable mit allen Dateinamen und Erweiterungen zurück.
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
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
quelle
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')]
quelle