您的位置:首页 > 编程语言 > Python开发

python glob.glob使用

2015-08-24 11:59 357 查看
使用了下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."

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: