使用通配符搜索文件

Sta*_*tan 42 python file wildcard

我想获得一个带有通配符的搜索模式的文件名列表.喜欢:

getFilenames.py c:\PathToFolder\*
getFilenames.py c:\PathToFolder\FileType*.txt
getFilenames.py c:\PathToFolder\FileTypeA.txt
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Mar*_*tin 71

像这样:

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

这直接来自这里:http://docs.python.org/library/glob.html

  • 正如Donald Miner在另一个答案中指出的那样,根据所使用的shell,这并不完全正确. (2认同)

Don*_*ner 19

glob如果你在python中这样做是有用的,但是,你的shell可能没有传入*(我不熟悉windows shell).

例如,当我执行以下操作时:

import sys
print sys.argv
Run Code Online (Sandbox Code Playgroud)

在我的shell上,我键入:

$ python test.py *.jpg
Run Code Online (Sandbox Code Playgroud)

我明白了:

['test.py', 'test.jpg', 'wasp.jpg']
Run Code Online (Sandbox Code Playgroud)

请注意,argv不包含"*.jpg"

这里的重要教训是,在将shell传递给应用程序之前,大多数shell都会在shell中展开星号.

在这种情况下,要获取文件列表,我会这样做sys.argv[1:].或者,您可以逃避*,以便python看到文字*.然后,您可以使用该glob模块.

$ getFileNames.py "*.jpg"
Run Code Online (Sandbox Code Playgroud)

要么

$ getFileNames.py \*.jpg
Run Code Online (Sandbox Code Playgroud)


s3c*_*ur3 12

如果您使用的是 Python 3.5+,则可以使用pathlib'sglob()代替glob单独使用模块。

获取目录中的所有文件如下所示:

from pathlib import Path
for path in Path("/path/to/directory").glob("*"):
    print(path)
Run Code Online (Sandbox Code Playgroud)

或者,要获取.txt目录中所有文件的列表,您可以这样做:

from pathlib import Path
for path in Path("/path/to/directory").glob("*.txt"):
    print(path)
Run Code Online (Sandbox Code Playgroud)

最后,您可以使用通配符目录递归搜索(即查找.txt目标目录和所有子目录中的所有文件):

from pathlib import Path
for path in Path("/path/to/directory").glob("**/*.txt"):
    print(path)
Run Code Online (Sandbox Code Playgroud)


Dan*_*erg 5

from glob import glob
import sys

files = glob(sys.argv[1])
Run Code Online (Sandbox Code Playgroud)