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
--
http://mail.python.org/mailman/listinfo/python-list