使用通配符搜索文件
我想要获取带有通配符搜索模式的文件名列表。比如:
getFilenames.py c:\PathToFolder\*
getFilenames.py c:\PathToFolder\FileType*.txt
getFilenames.py c:\PathToFolder\FileTypeA.txt
我该怎么做?
I want get a list of filenames with a search pattern with a wildcard. Like:
getFilenames.py c:\PathToFolder\*
getFilenames.py c:\PathToFolder\FileType*.txt
getFilenames.py c:\PathToFolder\FileTypeA.txt
How can I do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以这样做:
注意:
如果目录包含以
.
开头的文件,默认情况下它们不会匹配。例如,考虑一个包含card.gif
和.card.gif
的目录:这直接来自这里:http://docs.python.org/library/glob.html
You can do it like this:
Note:
If the directory contains files starting with
.
they won’t be matched by default. For example, consider a directory containingcard.gif
and.card.gif
:This comes straight from here: http://docs.python.org/library/glob.html
如果您在 python 中执行此操作,则
glob
很有用,但是,您的 shell 可能不会传入*
(我不熟悉 Windows shell)。例如,当我执行以下操作时:
在我的 shell 上,输入:
我得到:
注意
argv
不包含"*.jpg"
这里重要的教训是大多数 shell 都会在将星号传递给您的应用程序之前展开 shell 中的星号。
在这种情况下,要获取文件列表,我只需执行
sys.argv[1:]
即可。或者,您可以转义*
,以便 python 看到文字*
。然后,您可以使用glob
模块。或者
glob
is useful if you are doing this in within python, however, your shell may not be passing in the*
(I'm not familiar with the windows shell).For example, when I do the following:
On my shell, I type:
I get this:
Notice that
argv
does not contain"*.jpg"
The important lesson here is that most shells will expand the asterisk at the shell, before it is passed to your application.
In this case, to get the list of files, I would just do
sys.argv[1:]
. Alternatively, you could escape the*
, so that python sees the literal*
. Then, you can use theglob
module.or
如果您使用的是 Python 3.5+,则可以使用
pathlib
< /a> 的glob()
而不是单独的glob
模块。获取目录中的所有文件如下所示:
或者,要只是获取目录中所有
.txt
文件的列表,您可以这样做:最后,您可以搜索使用通配符目录递归地(即,查找目标目录和所有子目录中的所有
.txt
文件):If you're on Python 3.5+, you can use
pathlib
'sglob()
instead of theglob
module alone.Getting all files in a directory looks like this:
Or, to just get a list of all
.txt
files in a directory, you could do this:Finally, you can search recursively (i.e., to find all
.txt
files in your target directory and all subdirectories) using a wildcard directory:我将其添加到前面的内容中,因为我发现当您希望脚本在多个 shell 上运行并使用
*
具有多个参数时,这非常有用。如果您想要在每个 shell 上运行的东西,您可以执行以下操作(仍然使用
glob
):请注意,它可能会产生重复(如果您有一个
test
文件并且您给t*
和te*
),但您可以简单地使用set
删除它们:I am adding this to the previous because I found this very useful when you want your scripts to work on multiple shell and with multiple parameters using
*
.If you want something that works on every shells, you can do the following (still using
glob
):Note that it can produce duplicate (if you have a
test
file and you givet*
andte*
), but you can simply remove them using aset
: