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

Reply via email to