use*_*524 4 python os.walk python-2.7
我写了一个图像雕刻脚本来协助我的工作.该工具通过指定的扩展来雕刻图像,并与哈希数据库进行比较.
该工具用于搜索已安装的驱动器,其中一些驱动器上安装了操作系统.
我遇到的问题是当一个驱动器安装了操作系统时,它正在"所有用户"目录中搜索,因此包含来自我本地光盘的图像.
我无法弄清楚如何跳过"所有用户"目录,只是坚持已安装的驱动器.
我的os.walk部分如下:
for path, subdirs, files in os.walk(root):
for name in files:
if re.match(pattern, name.lower()):
appendfile.write (os.path.join(path, name))
appendfile.write ('\n')
log(name)
i=i+1
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢
假设All Users
是目录的名称,您可以从subdirs
列表中删除该目录,这样os.walk()
就不会迭代它.
示例 -
for path, subdirs, files in os.walk(root):
if 'All Users' in subdirs:
subdirs.remove('All Users')
for name in files:
if re.match(pattern, name.lower()):
appendfile.write (os.path.join(path, name))
appendfile.write ('\n')
log(name)
i=i+1
Run Code Online (Sandbox Code Playgroud)
如果你只是想不走了All Users
一个特定父里面,可以包括的检查,以及在上述if
的条件.
从os.walk
文档 -
os.walk(top,topdown = True,onerror = None,followlinks = False)
通过从上到下或从下到上遍历树来生成目录树中的文件名.对于以目录top(包括top本身)为根的树中的每个目录,它会产生一个3元组(dirpath,dirnames,filenames).
当topdown为True时,调用者可以就地修改dirnames列表(可能使用del或slice赋值),而walk()只会递归到名称保留在dirnames中的子目录中; 这可用于修剪搜索,强制执行特定的访问顺序,甚至可以告诉walk()有关调用者在再次恢复walk()之前创建或重命名的目录.当topdown为False时修改dirnames是无效的,因为在自下而上模式中,dirnames中的目录是在生成dirpath本身之前生成的.
topdown
通常是正确的,除非另有说明.