使用通配符搜索文件
我想要获取一个文件名的列表,这些文件名符合某种搜索模式,并且可以使用通配符。比如:
getFilenames.py c:\PathToFolder\*
getFilenames.py c:\PathToFolder\FileType*.txt
getFilenames.py c:\PathToFolder\FileTypeA.txt
我该怎么做呢?
5 个回答
12
如果你使用的是Python 3.5或更高版本,可以用pathlib
里的glob()
,而不是单独使用glob
模块。
要获取一个文件夹里的所有文件,可以这样写:
from pathlib import Path
for path in Path("/path/to/directory").glob("*"):
print(path)
或者,如果你只想获取文件夹里所有的.txt
文件,可以这样做:
from pathlib import Path
for path in Path("/path/to/directory").glob("*.txt"):
print(path)
最后,你还可以递归搜索,也就是查找目标文件夹及其所有子文件夹里的所有.txt
文件,方法是使用通配符目录:
from pathlib import Path
for path in Path("/path/to/directory").glob("**/*.txt"):
print(path)
22
glob
在 Python 中很有用,但你的命令行可能没有传递 *
(我对 Windows 的命令行不太熟悉)。
举个例子,当我这样做的时候:
import sys
print sys.argv
在我的命令行中,我输入:
$ python test.py *.jpg
我得到的是:
['test.py', 'test.jpg', 'wasp.jpg']
注意到 argv
中并没有 "*.jpg"
。
这里重要的一点是,大多数命令行会在传递给你的程序之前,先处理掉星号。
在这种情况下,要获取文件列表,我只需要用 sys.argv[1:]
。另外,你也可以对 *
进行转义,这样 Python 就能看到字面上的 *
。然后,你就可以使用 glob
模块了。
$ getFileNames.py "*.jpg"
或者
$ getFileNames.py \*.jpg
102
你可以这样做:
>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
注意:如果文件夹里有以 .
开头的文件,默认情况下是不会被匹配到的。例如,假设一个文件夹里有 card.gif
和 .card.gif
:
>>> import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']
这段内容直接来自这里:http://docs.python.org/library/glob.html