> [code] > import os > > def print_tree(start_dir): > for f in os.listdir(start_dir): > fp = os.path.join(start_dir, f) > print fp > if os.path.isfile(fp): # will return false if use f here! > if os.path.splitext(fp)[1] == '.html': > print 'html file found!' > if os.path.isdir(fp): > print_tree(fp) > > print os.path > print_tree(r'c:\intent\docn') > [/code] > > As above it all works as expected. However, on the marked > line, if I use f instead of fp then that condition returns > false! Surely, isfile(f) should return true, even if I > just give a filename, rather than the full path? > > If anyway can explain this I'd be grateful,
If your current working directory (CWD) is the same as start_dir, the behaviors of using "f" and "fp" will be the same. However, if your CWD is *not* the same, "f" is relative to the CWD, and fp is "start_dir + f" relative to the CWD. Thus, >>> start_dir = 'temp' >>> os.path.abspath(os.path.curdir) '/home/tim' >>> f = 'filename' >>> fp = os.path.join(start_dir, f) >>> fp 'temp/filename' >>> os.path.abspath(f) '/home/tim/filename' >>> os.path.abspath(fp) '/home/tim/temp/filename' You may also want to read up on os.walk: for root, dirs, files in os.walk(start_dir): for f in files: if os.path.splitext(f)[1].lower()[1:] == 'html': print 'HTML:', os.path.join(root, f) #else: #print 'Not HTML:', os.path.join(root, f) which allows you to easily do what it looks like your code is doing. -tkc -- http://mail.python.org/mailman/listinfo/python-list