在提交版本库时,需要清除工作目录下的pyc文件,在《python cookbook》2.16节中提供了一种遍历目录树并找出指定文件的方法,可以利用这个清除工作目录下的pyc文件。
以下代码,做了简单的解释,并在pattern的调用中加入了strip方法以去除其两端的空格,来防止patterns字符串在以分号分割的同时因存在空格而无法匹配的情况。
代码:
#!/user/bin/python
# -*- coding: utf-8 -*-
# Filename: allfile.py
# Date:2011-03-26
import os
import fnmatch
def all_file(root, patterns='*',single_level=False, yield_folders=False):
"""
root: 需要遍历的目录
patterns: 需要查找的文件,以;为分割的字符串
single_level: 是否只遍历单层目录,默认为否
yield_folders: 是否包含目录本身,默认为否
"""
patterns = patterns.split(';')
for path, subdirs, files in os.walk(root):
if yield_folders:
files.extend(subdirs)
files.sort()
for name in files:
for pattern in patterns:
if fnmatch.fnmatch(name, pattern.strip()):# 去除pattern两端的空格
yield os.path.join(path, name)
if single_level:
break
os.walk
os.walk是一个generator函数。
每次可以得到一个三元tupple,其中第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。
举例:
fnmatch 实现shell风格模式匹配特定字符
fnmatch.fnmatch( names, pattern):测试name是否匹配pattern,返回true/false。
以下例子列出了当前目录中的所有py文件:
如果操作系统是大小写不敏感的,则在fnmatch.fnmatch()中所有的参数将被统一格式为所有大写或所有小写。
fnmatch.fnmatchcase ( names, pattern): 与平台无关的大小写敏感的fnmatch.fnmatch
fnmatch.filter( names, pattern):实现列表特殊字符的过滤或筛选,返回符合匹配模式的字符列表,例:
注意: [seq] 匹配单个seq中的任意单个字符
fnmatch.translate(pattern):翻译模式, fnmatch将这种全局模式转换成一个正则式,然后使用re模块来比较名字和模式。
translate() 函数是一个公共API用于将全局模式转换成正则式。
unix shell风格匹配方式
回到开始,删除pyc文件
os.remove()可以删除指定文件,参见文档。
删除pyc可以在以上遍历的基础上加入代码:
os.getcwd() 是获取当前文件夹,也可以用指定目录代替,如;'home'。