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?
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?
Antworten:
Dies könnte jemandem helfen:
names = [os.path.basename(x) for x in glob.glob('/your_path')]
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
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')]