我需要一個文件系統沃克,我可以指示忽略遍歷 我想保持不動的目錄,包括該分支下的所有子目錄 。 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. git克隆,忽略目錄
- 3. 隨機的沃克碼python
- 4. Git忽略以'。'開頭的目錄。
- 5. CVS忽略目錄
- 6. Htaccess忽略目錄
- 7. .htaccess忽略目錄
- 8. 忽略git目錄
- 9. GIT:忽略某些目錄,但不忽略其他目錄
- 10. 忽略os.walk()中的目錄?
- 11. 忽略子目錄的.gitignore
- 12. 忽略eclipse中的目錄
- 13. 忽略SVN中的目錄
- 14. 列出目錄,忽略子目錄ANT
- 15. WordPress的沃克
- 16. Git不會忽略目錄
- 17. 忽略目錄使用modrewrite
- 18. TS6059在忽略目錄
- 19. 目錄被「setup.py」忽略
- 20. 讓Codeigniter忽略目錄
- 21. .htaccess如何忽略目錄?
- 22. 忽略黃瓜欄目錄
- 23. .gitignore不會忽略目錄
- 24. Pylint忽略目錄問題
- 25. 忽略Mercurial子目錄
- 26. Excel VBA中忽略目錄
- 27. Github上頁忽略目錄
- 28. httpd.conf:忽略某些目錄?
- 29. 使ocamlbuild忽略目錄
- 30. SVN:忽略_versioned_目錄
我忘了切片分配,我冒昧地將其添加到我的代碼。 – 2009-05-29 10:10:50