On May 13, 3:10 pm, MRAB <pyt...@mrabarnett.plus.com> wrote: > 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. > > Please help. > > The problem is with your use of the 'match' method, which will look for > a match only at the start of the string. You need to use the 'search' > method instead. > > The regular expression is also incorrect. The string literal: > > '\\\.(\w)+$' > > passes the characters: > > \\.(\w)+$ > > to the re module as the regular expression, which will match a > backslash, then any character, then a word, then the end of the string. > What you want is: > > \\\.\w+$ > > (you don't need the parentheses) which is best expressed as the 'raw' > string literal: > > r'\\\.\w+$' Following your advice and add the case for C:\test \com.comp.hw.prod.proj.war\bin\.svn\tmp p = re.compile(r'\\\.\w+$') if p.search(dirpath): continue p = re.compile(r'\\\.\w+\\') if p.search(dirpath): continue
Problem is solved. Thanks. -- http://mail.python.org/mailman/listinfo/python-list