Python 使用通配符搜索文件
我想要一个带有通配符的搜索模式的文件名列表。比如:Python 使用通配符搜索文件,python,file,wildcard,Python,File,Wildcard,我想要一个带有通配符的搜索模式的文件名列表。比如: getFilenames.py c:\PathToFolder\* getFilenames.py c:\PathToFolder\FileType*.txt getFilenames.py c:\PathToFolder\FileTypeA.txt 我该怎么做?您可以这样做: >>> import glob >>> glob.glob('./[0-9].*') ['./1.gif', './2.txt']
getFilenames.py c:\PathToFolder\*
getFilenames.py c:\PathToFolder\FileType*.txt
getFilenames.py c:\PathToFolder\FileTypeA.txt
我该怎么做?您可以这样做:
>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
from pathlib import Path
for path in Path("/path/to/directory").glob("*"):
print(path)
注:
如果目录包含以
开头的文件,则默认情况下不会匹配这些文件。例如,考虑包含“代码>卡”、“GIF < /代码>和<代码> .CARI.GIF <代码>:的目录。
>>> import glob
>>> glob.glob('*.gif')
['card.gif']
>>> glob.glob('.c*')
['.card.gif']
这就直接从这里开始了:
glob
对于在python中执行此操作非常有用,但是,您的shell可能没有传入*
(我不熟悉windows shell)
例如,当我执行以下操作时:
import sys
print sys.argv
在shell上,我键入:
$ python test.py *.jpg
我明白了:
['test.py', 'test.jpg', 'wasp.jpg']
请注意,argv
不包含“*.jpg”
这里的重要经验是,大多数shell在传递给应用程序之前都会在shell处展开星号
在本例中,要获取文件列表,我只需执行sys.argv[1:://code>。或者,您可以转义*
,以便python看到文本*
。然后,您可以使用glob
模块
$ getFileNames.py "*.jpg"
或
我将此添加到前面的内容中,因为我发现当您希望脚本使用*
处理多个shell和多个参数时,此功能非常有用
如果您想要在每个shell上都能工作的东西,可以执行以下操作(仍然使用glob
):
请注意,它可能会产生重复项(如果您有一个测试
文件,并且您给出了t*
和te*
),但您可以使用集将它们删除:
>>> set(reduce(lambda r, x: r + glob.glob(x), sys.argv[1:], []))
如果您使用的是Python3.5+,那么可以单独使用's而不是glob
模块
获取目录中的所有文件如下所示:
>>> import glob
>>> glob.glob('./[0-9].*')
['./1.gif', './2.txt']
>>> glob.glob('*.gif')
['1.gif', 'card.gif']
>>> glob.glob('?.gif')
['1.gif']
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)
正如Donald Miner在另一个答案中指出的,这并不完全正确,取决于所使用的外壳。
from pathlib import Path
for path in Path("/path/to/directory").glob("**/*.txt"):
print(path)