使用Python处理目录(一):打印目录下的文件名
2016-06-13 00:00
417 查看
要想遍历某一目录下的文件名,使用os.walk再方便不过了。他返回的是一个以元组为元素的列表。每一个元素都包含三个内容:路径,该路径下的子目录,该路径下的文件。
os.walk使用了生成器技术(关于该技术的说明请参考其它文档或者技术资料)yield,给使用者带来了非常大的使用上的灵活性。由于生成器技术使得会函数walk的调用一次只返回一个元组,节省了内存空间,提升了执行效率。
比如使用者只想得到当前目录这一层次的文件,而不想递归其子目录函数。如果walk没有使用生成器技术,则可能需要通过传参控制是否递归子目录,或者利用两个函数分别管理是否递归子目录。另外如果需要控制递归层次,也需要添加参数。如果不想这么麻烦,也可以一次性获取目录下所有文件(包括子目录下的),然后根据需要使用哪些文件,但是这样带来的后果是时间和空间都带来了极大的浪费。
而使用了yield技术,由于生成器每次只生成一个目录层次的内容,节省时间和空间,同时将控制权交给用户,由用户决定是否要递归子目录。
本文中主要的函数allFiles也运用了生成器技术,调用一次返回一个需要的文件,而不是一次性返回所有需要的列表,同样在使用的灵活性和效率上都有很好的表现。
另外allFiles添加了一些个性化的功能:
1、通过fnmatch对想要的文件格式进行匹配过滤,想要匹配的文件在参数patterns中通过分号传递要匹配的文件种类。例如
2、
os.walk使用了生成器技术(关于该技术的说明请参考其它文档或者技术资料)yield,给使用者带来了非常大的使用上的灵活性。由于生成器技术使得会函数walk的调用一次只返回一个元组,节省了内存空间,提升了执行效率。
比如使用者只想得到当前目录这一层次的文件,而不想递归其子目录函数。如果walk没有使用生成器技术,则可能需要通过传参控制是否递归子目录,或者利用两个函数分别管理是否递归子目录。另外如果需要控制递归层次,也需要添加参数。如果不想这么麻烦,也可以一次性获取目录下所有文件(包括子目录下的),然后根据需要使用哪些文件,但是这样带来的后果是时间和空间都带来了极大的浪费。
而使用了yield技术,由于生成器每次只生成一个目录层次的内容,节省时间和空间,同时将控制权交给用户,由用户决定是否要递归子目录。
本文中主要的函数allFiles也运用了生成器技术,调用一次返回一个需要的文件,而不是一次性返回所有需要的列表,同样在使用的灵活性和效率上都有很好的表现。
另外allFiles添加了一些个性化的功能:
1、通过fnmatch对想要的文件格式进行匹配过滤,想要匹配的文件在参数patterns中通过分号传递要匹配的文件种类。例如
*代表匹配所有文件,
*txt代表匹配所有后缀名txt的文件。
2、
single_level为True表示只处理一层目录,为False表示递归处理子目录。3、yield_folders表示是否将匹配的目录也输出。
# root根目录, patterns匹配文件格式, single_level是否进行目录深层次查找 import fnmatch, os def allFiles(root, patterns = '*', single_level = False, yield_folders = False): patterns = patterns.split(';') for path, subdirs, files in os.walk(root): if yield_folders: #add subdirs to the tail of files files.extend(subdirs) files.sort() for name in files: for pattern in patterns: if fnmatch.fnmatch(name, pattern): yield os.path.join(path, name) break #only deal one level of the dir if single_level: break for name in allFiles('I:\\pTest', single_level = True): print(name)
相关文章推荐
- Python __file__与argv[0]
- python的函数定义方式
- Python中进行布尔类型处理时的特殊点
- numpy中的ndarray方法和属性
- python的print函数的一些功能
- Python环境安装
- 22.python中的面向对象和类的基本语法
- 学习Python(1) —— Python运行环境安装
- python数值范围内的迭代
- 树莓派lasersensor(Python程序)
- python的for语句的输出格式的改变
- python中的while和for语句的简单使用
- Python数字
- 简单的启程,从这里开始
- python的if语句
- python
- Python升级导致的yum错误
- python中的字典遍历
- Hello Python
- python中字符串的操作符+,和*号