测试环境:python 3.6.1 python 2.7.2
测试目录:cmspoc
os
os.listdir
语法:
|
|
可以以列表(list)列出当前目录下的文件夹及其文件,但没有区分开。同时注意并没有把特殊目录../
,./
作为结果返回。
可以利用os.path.isfile来判断是否为文件:
可以利用os.path.isdir来判断是否为文件夹:
也可以用来查找指定结尾(不一定是后缀)的文件:
os.walk
语法:
os.walk可以进行文件遍历。它接受四个参数,但绝大部分情况下直接传入一个路径就可。它的返回值一个三元组(dirpath, dirnames, filenames)。dirpath是指当前目录路径,dirnames是当前目录下所有子目录的名字(包括.
和..
),filenames是指dirpath中的文件(即非文件夹)。
假设此时的目录在cmspoc的script目录中:
则用for循环即可完成遍历:
基于for循环遍历提取/过滤文件:
os.scandir
从python3.5版本后有os.scandir(),能更快的遍历目录。更多介绍:os.scandir() function
|
|
可以看到返回的是DirEntry
对象,下面列一些简单的属性与方法。
仅打印出名字(name
属性):
判断是否为文件:
判断是否为文件夹:
glob
确切的说,glob模块不是来列目录的,是用来查找给定规则的文件路径名。查询所需的字符(规则)有三个:
*
表示通配符,匹配零个或多个字符。?
匹配一个字符。[]
匹配指定范围内的字符。
glob.glob
语法:
可以使用绝对路径,配合*
列出指定目录下所有文件:
也可以使用相对路径:
可以查找满足符合规则的文件,比如查找py文件:
在python3.5以上,glob.glob支持特殊通配符**
和递归(recursive )操作,:
比如列出当前目录下所有的py文件:
glob.iglob
iglob返回一个能生成与glob()结果相同的迭代器:
pathlib
pathlib在python3.4及其之后版本中默认继承了,python3.3之前的版本需要通过pip进行安装。
打印出当前目录(.
)下的文件夹与文件:
仅打印出当前目录(.
)下的文件:
仅打印出当前目录(.
)下的文件夹:
Refference
- diveintopython:Working with Directories
- stackoverflow:Find all files in a directory with extension .txt in Python
- stackoverflow:Use a Glob() to find files recursively in Python?
- stackoverflow:Directory listing in Python
- stackoverflow:How do I list all files of a directory?
- stackoverflow:Getting a list of all subdirectories in the current directory
- stackoverflow:How to get all of the immediate subdirectories in Python
- Options for listing the files in a directory with Python