我最近写了一个小代码来读取目录。我想做的是排除其中一些。
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
我该如何解决?
答案 0 :(得分:3)
你正在分配错误的东西。您需要从https://docs.python.org/3/library/os.html?highlight=os.walk#os.walk:
以自上而下模式编辑dirs
数组
如果可选参数
topdown
为True
或未指定,则在其任何子目录(目录自上而下生成)的三元组之前生成目录的三元组。如果topdown
为False
,则在所有子目录的三元组(目录从下向上生成)之后生成目录的三元组。无论topdown
的值如何,都会在生成目录及其子目录的元组之前检索子目录列表。当
topdown
为True
时,来电者可以就地修改dirnames
列表(可能使用del
或切片分配),walk()
将{}只递归到名称保留在dirnames
的子目录中;这可用于修剪搜索,强制执行特定的访问顺序,甚至可以通知walk()
有关调用者在再次恢复walk()
之前创建或重命名的目录。在dirnames
为topdown
时修改False
对行走的行为没有影响,因为在自下而上模式下dirnames
中的目录是在dirpath
之前生成的本身是生成的。
所以你可能想要这样的东西:
for dir, dirs, _ in os.walk(src, topdown=True):
dirs[:] = [d for d in dirs if d not in exclude_prefixes]