it-swarm.com.de

Suchen Sie nach einer Datei mit einem Platzhalter

Ich möchte eine Liste von Dateinamen mit einem Suchmuster mit einem Platzhalter erhalten. Mögen:

getFilenames.py c:\PathToFolder\*
getFilenames.py c:\PathToFolder\FileType*.txt
getFilenames.py c:\PathToFolder\FileTypeA.txt

Wie kann ich das machen?

39
Stan

So was:

>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']

Das kommt direkt von hier: http://docs.python.org/library/glob.html

65
Martin

glob ist nützlich, wenn Sie dies in Python tun, Ihre Shell gibt jedoch möglicherweise nicht den * weiter (die Windows-Shell ist mir nicht bekannt).

Zum Beispiel, wenn ich Folgendes mache:

import sys
print sys.argv

Auf meiner Shell tippe ich:

$ python test.py *.jpg

Ich bekomme das:

['test.py', 'test.jpg', 'wasp.jpg']

Beachten Sie, dass argv keinen "*.jpg" enthält.

Die wichtige Lektion hier ist, dass die meisten Shells das Sternchen an der Shell erweitern , bevor es an Ihre Anwendung übergeben wird.

In diesem Fall würde ich sys.argv[1:] tun, um die Liste der Dateien zu erhalten. Alternativ können Sie den * mit einem Escapezeichen versehen, sodass Python das Literal * sieht. Dann können Sie das Modul glob verwenden.

$ getFileNames.py "*.jpg"

oder

$ getFileNames.py \*.jpg
17
Donald Miner
from glob import glob
import sys

files = glob(sys.argv[1])
5
Daniel Egeberg

Ich füge dies dem vorherigen hinzu, weil ich es sehr nützlich fand, wenn Sie möchten, dass Ihre Skripte auf mehreren Shell und mit mehreren Parametern mit * funktionieren.

Wenn Sie etwas möchten, das auf allen Shells funktioniert, können Sie Folgendes tun (verwenden Sie weiterhin glob):

>>> import glob
>>> from functools import reduce # if using python 3+
>>> reduce(lambda r, x: r + glob.glob(x), sys.argv[1:], [])

Beachten Sie, dass es zu Duplikaten kommen kann (wenn Sie eine test-Datei haben und t* und te* angeben), Sie können sie jedoch einfach mit einer set entfernen:

>>> set(reduce(lambda r, x: r + glob.glob(x), sys.argv[1:], []))
0
Holt