[python] Divné chování os.walk

Filip Bartmann filbar na centrum.cz
Středa Červen 1 17:20:57 CEST 2011


V programu mám tento kód:
---------------------------------------------------------------------------
 	def list_dir(self,dir):
                for root,dirs,files in os.walk(dir):
                        print dirs;
                        for name in dirs:
                                dirname=os.path.join(root,name);
                                if self.exclude_dir(dirname):
                                        dirs.remove(name);
					continue;
                                print name;
                                self.create_context(dirname,True);
                        for file in files:
                                filename=os.path.join(root,file);
                                self.create_context(filename,False);
        
        def exclude_dir(self,dir):
                for e in self.exclude:
                        e=re.sub("/$","",e);
                        if re.search("^"+e,dir):
                                return True;
                return False;

--------------------------------------------------------------------------

Problém mi ale dělá podmínka exclude_dir, ona jaky by nevynechávala
jenom zadaný adresář, ale mimo to i jeden navíc.

V dirs mám např(print dirs v kódu): ['usr', 'hosts', 'lib', 'selinux',
'etc', 'lib64', 'var', 'dev', 'bin', 'proc'] a na vynechání mám určene
hosts. selinux a var, jenomže ono mi to projde jenom adresáře(print
name v kódu):
usr
lib64
bin

Tedy když chci vynechat třeba selinux, tak mi to vynechá i etc, ale
zajímavé je, že podadresáře toho v tomto případě etc to vezme, ale v té
samotné úrovni to přeskakuje jakoby oba dva adresáře.

Předem děkuji za odpověď.

Filip Bartmann


Další informace o konferenci Python