我需要一个文件系统沃克,我可以指示忽略遍历 我想保持不动的目录,包括该分支下的所有子目录 。 os.walk和os.path.walk只是不这样做。可以忽略目录的Python沃克
8
A
回答
1
所以我做了这个家庭的角色沃克功能:
import os
from os.path import join, isdir, islink, isfile
def mywalk(top, topdown=True, onerror=None, ignore_list=('.ignore',)):
try:
# Note that listdir and error are globals in this module due
# to earlier import-*.
names = os.listdir(top)
except Exception, err:
if onerror is not None:
onerror(err)
return
if len([1 for x in names if x in ignore_list]):
return
dirs, nondirs = [], []
for name in names:
if isdir(join(top, name)):
dirs.append(name)
else:
nondirs.append(name)
if topdown:
yield top, dirs, nondirs
for name in dirs:
path = join(top, name)
if not islink(path):
for x in mywalk(path, topdown, onerror, ignore_list):
yield x
if not topdown:
yield top, dirs, nondirs
7
它可以修改就地os.walk
的返回值的第二个元素:
[...]调用者可以就地修改dirnames列表(可能使用del或slice赋值),而walk()只会递归到名称保留在dirnames中的子目录中;这可以用来修剪搜索[...]现在
def fwalk(root, predicate):
for dirpath, dirnames, filenames in os.walk(root):
dirnames[:] = [d for d in dirnames if predicate(r, d)]
yield dirpath, dirnames, filenames
,您可以在子目录谓词只手:
>>> ignore_list = [...]
>>> list(fwalk("some/root", lambda r, d: d not in ignore_list))
9
其实,os.walk
可以做你想做什么。假设我有一个要在ignore
中忽略的目录列表(可能是一组)。然后这应该工作:
def my_walk(top_dir, ignore):
for dirpath, dirnames, filenames in os.walk(top_dir):
dirnames[:] = [
dn for dn in dirnames
if os.path.join(dirpath, dn) not in ignore ]
yield dirpath, dirnames, filenames
2
这是最好的和简单的解决方案。
def walk(ignores):
global ignore
path = os.getcwd()
for root, dirs, files in os.walk(path):
for ignore in ignores:
if(ignore in dirs):
dirs.remove(ignore)
print root
print dirs
print files
walk(['.git', '.svn'])
请记住,如果您从dirs中删除文件夹名称,它将不会被os.walk探索。
希望它有帮助
相关问题
- 1. 目录沃克为Python
- 2. 随机的沃克码python
- 3. Git忽略以'。'开头的目录。
- 4. Htaccess忽略目录
- 5. CVS忽略目录
- 6. GIT:忽略某些目录,但不忽略其他目录
- 7. 列出目录,忽略子目录ANT
- 8. WordPress的沃克
- 9. Git不会忽略目录
- 10. Git不会忽略目录
- 11. 使ocamlbuild忽略目录
- 12. 忽略目录使用modrewrite
- 13. Github上页忽略目录
- 14. .htaccess如何忽略目录?
- 15. httpd.conf:忽略某些目录?
- 16. 目录被“setup.py”忽略
- 17. .gitignore不会忽略目录
- 18. 忽略项目“其他包含目录”被忽略
- 19. 取消忽略了一个被忽略的目录中的git
- 20. 获取混帐不忽略通配符后的目录忽略
- 21. 的Git忽略不目录中的.gitignore
- 22. 是否可以忽略TextBox?
- 23. 可以忽略DbUpdateConcurrencyException吗?
- 24. 问题忽略git中的子目录
- 25. 不忽略子目录中的文件?
- 26. 忽略git中的目录链?
- 27. 忽略RewriteRule中的目录 - .htaccess
- 28. 忽略子目录中的Web.config
- 29. 巴贝尔忽略的几个目录
- 30. 使用ack的.ackrc忽略目录
我忘了切片分配,我冒昧地将其添加到我的代码。 – 2009-05-29 10:10:50