Skip to main content
 首页 » 编程设计

python遍历列表

2025年05月04日11grandyang

我尝试遍历列表中的每个项目。但是迭代器不会遍历所有对象。 这是我的函数代码(dirs 和 root 来自 os.walk)

def remove_hidden_dirs(dirs,root): 
    """ 
    Function remove hidden directories . .. in unix 
    """ 
    logging.debug("\n\n remove hidden" ) 
    logging.debug('Start removing hidden dirs for %s',root) 
    logging.debug("Length of dirs %s",len(dirs)) 
    logging.debug('File list before removing') 
    dirs.sort() 
    for d in dirs: 
        logging.debug(d) 
    i=0 
    for d in dirs: 
        i=i+1 
        logging.debug("Iterating over %s",d) 
        if d[0:1] == '.' or d[0:2] =='..': 
            dirs.remove(d) 
            logging.debug("Dir %s is being removed because of being hidden dir",d) 
        else: 
            logging.debug("Dir %s is NOT being removed because of being hidden dir",d) 
    logging.debug("Iterate on %s", i) 
    logging.debug('File list after removing') 
    for d in dirs: 
        logging.debug(d) 
    logging.debug('end remove hidden files\n\n') 
    return dirs 

这是我的日志文件的一部分

DEBUG:root:Start removing hidden dirs for /home/artur/ 
DEBUG:root:Length of dirs 38 
DEBUG:root:File list before removing 
DEBUG:root:.adobe 
DEBUG:root:.android 
DEBUG:root:.cache 
DEBUG:root:.config 
DEBUG:root:.dbus 
... 
DEBUG:root:Iterate on 22 dirs 
DEBUG:root:File list after removing 
DEBUG:root:.adobe 
DEBUG:root:.cache 
DEBUG:root:.dbus 
... 

在此先感谢您的帮助

请您参考如下方法:

不要在遍历列表时修改列表。相反,生成一个仅包含您要保留的项目的新列表。

dirs = [d for d in dirs if not d.startswith('.')] 

是一种高效、简单且可读的技术。