One - One Code All

Blog Content

python中glob.glob的功能用法

Python   2008-06-15 13:19:03

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

glob.glob的参数是一个只含有方括号、问号、正斜线的正则表达式,同时也是shell命令(就是那些我们用在cd命令后面的参数)。

就像官方文档的第一句所说那样"The glob module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell."

一.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."



上一篇:java Random.nextInt()方法
下一篇:Linux下如何查看文件md5值

The minute you think of giving up, think of the reason why you held on so long.