Was ist der beste Weg, um in einen Ordner mit Python zu schauen, wenn Sie einen Dateinamen und einen Verzeichnisnamen möchten, aber keinen Pfad benötigen ...
Zum Beispiel, wenn die folgende Datei im Testverzeichnis vorhanden ist
test.csv
test.py
test.sh
test.txt
test1
test2
test3
Wenn Sie das "glob" -Modul verwenden, sieht es so aus.
>>> import glob
>>> glob.glob('test/*')
['test/test.csv', 'test/test.py', 'test/test.sh', 'test/test.txt', 'test/test1', 'test/test2', 'test/test3']
Im Idealfall jedoch
>>> import hoge
>>> hoge.hoge('test/*')
['test.csv', 'test.py', 'test.sh', 'test.txt', 'test1', 'test2', 'test3']
Ich möchte, dass es so aussieht.
Es gibt die folgenden Methoden, aber es ist schmerzhaft, dass Sie keinen Platzhalter angeben können.
>>> import os
>>> os.listdir('test/')
['test.csv', 'test.py', 'test.sh', 'test.txt', 'test1', 'test2', 'test3']
Basierend auf dem oben Gesagten habe ich mir die folgenden drei ausgedacht Die am häufigsten verwendete Methode ist die Verwendung von "Befehlen".
>>> import commands
>>> commands.getoutput('ls test/* | xargs -n 1 basename').split("\n")
['test.csv', 'test.py', 'test.sh', 'test.txt', 'test1', 'test2', 'test3']
Ist es ein einfacher Ansatz, nur den Basisnamen des vom Glob-Modul erhaltenen Pfads abzurufen?
>>> import glob
>>> [r.split('/')[-1] for r in glob.glob('test/*')]
['test.csv', 'test.py', 'test.sh', 'test.txt', 'test1', 'test2', 'test3']
>>> import glob, os
>>> [os.path.basename(r) for r in glob.glob('test/*')]
['test.csv', 'test.py', 'test.sh', 'test.txt', 'test1', 'test2', 'test3']
Ich war neugierig, wie es alle machten, also schrieb ich vorerst meine eigene Methode. Bitte bringen Sie mir bei, ob es einen guten Weg gibt.