python排除目录

时间:2015-11-08 14:26:38

标签: python-2.7 os.walk

我最近写了一个小代码来读取目录。我想做的是排除其中一些。

import os

exclude_prefixes = ['$RECYCLE.BIN']
src = raw_input("Enter source disk location: ")
src = os.path.dirname(src) 
for dir,_,_ in os.walk(src, topdown=True):
    dir[:] = [d for d in dir if d not in exclude_prefixes]

当我尝试执行此代码时出现此错误:

Traceback (most recent call last):
  File "C:\Python27\programs\MdiAdmin.py", line 40, in <module>
    dir[:] = [d for d in dir if d not in exclude_prefixes]
TypeError: 'unicode' object does not support item assignment

我该如何解决?

1 个答案:

答案 0 :(得分:3)

你正在分配错误的东西。您需要从https://docs.python.org/3/library/os.html?highlight=os.walk#os.walk

以自上而下模式编辑dirs数组
  

如果可选参数topdownTrue或未指定,则在其任何子目录(目录自上而下生成)的三元组之前生成目录的三元组。如果topdownFalse,则在所有子目录的三元组(目录从下向上生成)之后生成目录的三元组。无论topdown的值如何,都会在生成目录及其子目录的元组之前检索子目录列表。

     

topdownTrue时,来电者可以就地修改dirnames列表(可能使用del或切片分配),walk()将{}只递归到名称保留在dirnames的子目录中;这可用于修剪搜索,强制执行特定的访问顺序,甚至可以通知walk()有关调用者在再次恢复walk()之前创建或重命名的目录。在dirnamestopdown时修改False对行走的行为没有影响,因为在自下而上模式下dirnames中的目录是在dirpath之前生成的本身是生成的。

所以你可能想要这样的东西:

for dir, dirs, _ in os.walk(src, topdown=True):
    dirs[:] = [d for d in dirs if d not in exclude_prefixes]