glob.glob匹配符合条件的所有文件

一般使用方法,搜索该文件夹下的所有文件

#命令行
>>> import glob
>>> glob.glob("*")
['__pycache__', 'imdb_preprocess.py', 'pickle']


#程序内
import glob
file_list=glob.glob("*")
print(file_list)
#输出:
#['__pycache__', 'imdb_preprocess.py', 'pickle']

使用了下thrift,出现了一些路径问题。原来是glob.glob函数捣的鬼。所以扒了下英文文档,有些收获。下面分享。

函数功能:匹配符合条件的所有文件,并将其以list的形式返回。

一.glob.glob的介绍和一些实现细节

1.glob.glob函数的参数是字符串。这个字符串的书写和我们使用linux的shell命令相似,或者说基本一样。也就是说,只要我们按照平常使用cd命令时的参数就能够找到我们所需要的文件的路径。字符串中可以包括“*”、“?”和"["、"]",其中“*”表示匹配任意字符串,“?”匹配任意单个字符,[0-9]与[a-z]表示匹配0-9的单个数字与a-z的单个字符。

2.glob.glob不支持“~”波浪符号,这个符号在linux代表当前用户的home目录。

3.官方文档上说“This is done by using the os.listdir() and fnmatch.fnmatch() functions in concert, and not by actually invoking a subshell”,(这个函数是通过配合使用os.listdir()与fnmatch.fnmatch()实现的,而非调用一个子shell)。但是在他的源代码中没有找到这两个函数的调用痕迹。

4.官方源代码中,返回的是一个list,但是它是使用iterator实现的。所以,它的内存占用是常数级别的。注意,他这里使用了yield关键字来实现iterator。

这是一些细节问题。

二.使用glob.glob获得文件路径

  • 1.在ubuntu下,获得当前文件夹下的文件。如,当前路径为/home/,在这里有文件夹chen,文件sssde.ini。如图:

        参数为相对路径“./*”或者“*”获得所有文件路径。如果文件名是已知的,那么参数为“./filename”或者“filename”如下:

import glob
glob.glob("*")

所得结果如下:

  • 2.怎么获得当前目录的某个子目录的文件呢?

        子文件也属于相对路径,所以使用“./*/filename”或者“*/filename”。这里一个“*/”代表下一层文件夹。如当前我们在“/”下,要找/home/chen文件夹下的文件“1.sh”。参数是“*/*/1.sh”,效果如下:

  • 3.如果当前我们在/home/chen文件夹下,那么怎么获得在/tmp文件加下的grub文件的路径呢?

        这里,使用绝对路径较好,也就是使用类似“/*/*”的参数。要解决这个问题,我们的参数应该为“/*/grub”,效果如下:

总结:glob.glob的参数是一个只含有方括号、问号、正斜线的正则表达式,同时也是shell命令(就是那些我们用在cd命令后面的参数)。就像官方文档的第一句所说那样"The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell."

猜你喜欢

转载自blog.csdn.net/lyb3b3b/article/details/82186912