Ho bisogno di un walker del file system che possa istruire per ignorare le directory che attraversano che non intendo, comprese tutte le sottodirectory sotto quel ramo. os.walk e os.path.walk non lo fanno.Un Python walker che può ignorare le directory
risposta
Così ho fatto questa casa-ruoli funzione walker:
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
E 'possibile modificare il secondo elemento di valori di ritorno os.walk
s' in-place:
[...] il chiamante può modificare l'elenco dei nomi sul posto (magari usando l'assegnazione del o slice), e walk() ricercherà solo nelle sottodirectory i cui nomi rimangono in dirnames; questo può essere usato per potare alla ricerca [...]
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
Ora, si può semplicemente mano in un predicato per la sottodirectory:
>>> ignore_list = [...]
>>> list(fwalk("some/root", lambda r, d: d not in ignore_list))
In realtà, os.walk
può fare esattamente quello che vuoi . Dire che ho una lista (forse un set) di directory da ignorare in ignore
. Quindi questo dovrebbe funzionare:
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
Ecco la soluzione migliore e semplice.
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'])
Ricordare, se si rimuove il nome della cartella da dirs, non verrà esplorato da os.walk.
Speranza che aiuta
- 1. Directory Walker per Python
- 2. Come ignorare le directory durante l'esecuzione di Django collectstatic?
- 3. formattatore di Eclipse: può ignorare le annotazioni?
- 4. pylint ignorare per directory
- 5. Dipendente Walker: dll mancanti
- 6. sintassi .hgignore per ignorare solo i file, non le directory?
- 7. Come posso ignorare le directory .svn quando utilizzo lo sloccount?
- 8. Python doctest può ignorare alcune linee di uscita?
- 9. (Python) Problemi con le directory che hanno caratteri speciali
- 10. .gitignore: Ignorare una directory specifica e che uno solo
- 11. Ignorare una directory usando .ackrc di ack
- 12. Ruby che cancella le directory
- 13. Git: non ignorare un -directory- con un punto in esso
- 14. Python che importa un modulo da una directory parallela
- 15. non può ignorare un membro di cemento senza un terzo membro che è ignorata da entrambi
- 16. Python non riconosce le directory os.path.isdir()
- 17. Dimensione massima di un file che Python può aprire?
- 18. Cosa può ignorare gli attributi in un input HTML?
- 19. NuGet.exe non comprime le directory che iniziano con il punto
- 20. può velocity ignorare newline e spazi bianchi?
- 21. Impedire che le directory madri vengano catapizzate
- 22. Si può pensare che l'asyncio.coroutine di Python sia un generatore?
- 23. Può Automapper ignorare i metodi di annullamento?
- 24. Può ClickOnce essere configurato per eliminare le vecchie directory pubblicate?
- 25. Gradle può gestire una struttura di directory di build che non rispetta le convenzioni di default?
- 26. cambia directory con python
- 27. Ignorare le proprietà in FileHelpers
- 28. Ignorare le eccezioni in xUnit.net
- 29. NUnit ignorare tutte le prove
- 30. Ignorare le sottodirectory in .ackrc
io in qualche modo dimenticato di assegnazione fetta, mi sono permesso di aggiungere che al mio codice. –
Questo è il modo previsto per farlo, lo dice anche nella documentazione di os.path.walk(). – unwind
No, intendo l'assegnazione della slice completa come metodo per modificare l'intero elenco, non il fatto che è possibile modificarlo. –