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

azurIt azurit na pobox.sk
Středa Červen 1 17:30:07 CEST 2011


for name in dirs:
...
     dirs.remove(name);
 

nemal by si editovat objekt, ktory pouzivas v cykle for, hlavne ak sa jedna o obycajne pole (co zrejme ano).


 
 ______________________________________________________________
 > Od: "Filip Bartmann" 
 > Komu: python na py.cz
 > Dátum: 01.06.2011 17:21
 > Predmet: [python] Divné chování os.walk
 >
 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
 _______________________________________________
 Python mailing list
 Python na py.cz
 http://www.py.cz/mailman/listinfo/python

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20110601/52dcdb28/attachment.html>


Další informace o konferenci Python