在我目前的目录中,我有以下文件: project1,project5,junk,temp和personal
我想只在这个级别浏览子目录。 对于除垃圾,临时和个人以外的目录,我想打开并处理其中存在的特定文件,称为project.c
for dirs in os.walk('.').next()[1] :
if dirs !='junk' or dirs!='temp' or dirs != 'personal':
print dirs
print "relevant\n"
# file = open(project//project.c) # process relevant files
我该怎么做?
答案 0 :(得分:1)
这是一种方式:
import os
import glob
ignoreDirs = ['junk', 'temp', 'personal']
for x in glob.glob('*'):
if (os.path.isdir(x) == False):
continue
if (x in ignoreDirs):
continue
# ... do processing work here ...
答案 1 :(得分:0)
这是另一种有点相似的方式
ignored=set(('junk','temp','personal'))
projectfiles=set(('project.c','Makefile.in'))
for direntry in os.listdir('.') :
if not direntry in ignored :
filename=os.path.join(os.path.dirname('.'),direntry)
if os.path.isdir(filename) :
for projectfile in projectfiles :
projectfilepath=os.path.join(filename,projectfile)
if os.path.exists(projectfilepath) :
fd=open(projectfilepath)
# Do whatever processing is needed
fd.close()
答案 2 :(得分:0)
从python文档here,可以修改dirnames以影响遍历:
当topdown为True时,来电者可以 就地修改dirnames列表 (也许使用del或slice 赋值)和walk()只会 递归到其子目录中 姓名保留在名字中;这可以 用来修剪搜索,强加一个 具体的访问顺序,甚至是 告诉walk()有关目录的信息 调用者在它之前创建或重命名 再次继续行走()。修改 topdown为False时的dirnames是 无效,因为在自下而上的模式 dirnames中的目录是 在dirpath本身之前生成的 生成。
所以,你可以这样做:
def clean(dirs):
to_ignore = ("tmp", "junk", "personal")
for d in to_ignore:
if d in dirs:
dirs.remove(d)
for dirpath, dirnames, filenames in os.walk('.'):
clean(dirnames)
# process relevant files