walk directory & ignore all files/directories begin with '.'
Tim Chase
python.list at tim.thechases.com
Thu May 13 20:35:59 EDT 2010
On 05/13/2010 12:58 PM, albert kao wrote:
> I want to walk a directory and ignore all the files or directories
> which names begin in '.' (e.g. '.svn').
> Then I will process all the files.
> My test program walknodot.py does not do the job yet.
> Python version is 3.1 on windows XP.
> Please help.
>
> [code]
> #!c:/Python31/python.exe -u
> import os
> import re
>
> path = "C:\\test\\com.comp.hw.prod.proj.war\\bin"
> for dirpath, dirs, files in os.walk(path):
> print ("dirpath " + dirpath)
> p = re.compile('\\\.(\w)+$')
> if p.match(dirpath):
> continue
> print ("dirpath " + dirpath)
> for dir in dirs:
> print ("dir " + dir)
> if dir.startswith('.'):
> continue
>
> print (files)
> for filename in files:
> print ("filename " + filename)
> if filename.startswith('.'):
> continue
> print ("dirpath filename " + dirpath + "\\" + filename)
> # process the files here
> [/code]
>
> C:\python>walknodot.py
> dirpath C:\test\com.comp.hw.prod.proj.war\bin
> dirpath C:\test\com.comp.hw.prod.proj.war\bin
> dir .svn
> dir com
> []
> dirpath C:\test\com.comp.hw.prod.proj.war\bin\.svn
> dirpath C:\test\com.comp.hw.prod.proj.war\bin\.svn
> ...
>
> I do not expect C:\test\com.comp.hw.prod.proj.war\bin\.svn to appear
> twice.
Note that the first time .svn appears, it's as "dir .svn" while
the second time it appears, it's via "dirpath ...\.svn"
If you don't modify the list of dirs in place, os.walk will
descend into all the dirs by default. (Also, you shouldn't mask
the built-in dir() function by naming your variables "dir")
While it can be detected with regexps, I like the clarity of just
using ".startswith()" on the strings, producing something like:
for curdir, dirs, files in os.walk(root):
# modify "dirs" in place to prevent
# future code in os.walk from seeing those
# that start with "."
dirs[:] = [d for d in dirs if not d.startswith('.')]
print curdir
for f in files:
if f.startswith('.'): continue
print (os.path.join(curdir, f))
-tkc
More information about the Python-list
mailing list