Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用通配符搜索文件_Python_File_Wildcard - Fatal编程技术网

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)