[Tutor] Using os.path.walk across platforms (fwd)

Israel Evans israel@lith.com
Wed, 8 Aug 2001 10:50:00 -0700

whoops.  It think I just sent a blank email out.   sorry, trigger finger

I don't know if this will work on the nt to unix, I haven't tested it
because I don't have access to either one right yet,  but I just re3cently
did something that used all of the generic os stuff to print out a list of
directories and files.  This could be tweaked to do the same thing for you,
I think..

Anyway here it is...  let me know If I'm on crack or anything...

#! e:\ehold\python21

import os, os.path

def dircont(rootdir=os.getcwd()):
    """Types out a list of directories and files in specified directory

    dirlist = []
    filelist = []

    for item in os.listdir(rootdir):
	itempath = os.path.join(rootdir, item)
	if os.path.isdir(itempath):
	if os.path.isfile(itempath):
    print 'Root Directory: ', rootdir
    print '\nFiles:'
    for item in filelist:
	print '\t',item
    print '\nDirectories:'
    for item in dirlist:
	print '\t',item
if __name__ == '__main__':
    import os, os.path
    rootdir = raw_input('directory to search:>')
    raw_input('press any key to end')


-----Original Message-----
From: Daniel Coughlin [mailto:kauphlyn@speakeasy.org]
Sent: Tuesday, August 07, 2001 7:05 PM
To: rwaters@csmbid.com
Cc: tutor@python.org
Subject: Re: [Tutor] Using os.path.walk across platforms (fwd)


I wrote a function that might do the trick for you. I am not familiar enough
with the os.path.walk function to know exactly what you are wanting, but I
added a new function and rewrote a couple of lines in your script, which
returns a list of all the directories in the present working directory. This
work for a script running on unix connecting to an NT filesystem (at least
it worked on mine ;-) . It did not work going from NT to Unix. You might
need to tweak the regular expression to get it exact.

I am sure this can be improved upon however.


import os, string, re
from ftplib import FTP

def FilterDirectories(listing):
    templist = []
    dirlist = []
    for item in listing:
        if item[0] == 'd':
    for item in templist:
    for item in dirlist:
        print item + ' is a directory..'
    return dirlist

def GetFiles():
    listings = [] #going to be a list of retrlines
    session = FTP()
    session.connect('myhost', port=21)
    session.login(user=USERNAME, passwd='*****')
    session.cwd('Music') # delete this line
    session.retrlines('LIST', listings.append)

The output on my system is :

Bell and Sebastian is a directory..
cocteau twins is a directory..
rachels is a directory..
Radiohead is a directory..
Sly & The Family Stone is a directory..
Sonic Youth is a directory..
Talking Heads is a directory..

(These are all, in fact, directories!)

Then I suppose you could use the dirlist to loop through each of the
directories using chdir.

Hope this helps.


Hooray for Danny Yoo!!!

>---------- Forwarded message ----------
>Date: Tue, 07 Aug 2001 14:17:34 -0500
>From: Randy Waters <rwaters@csmbid.com>
>To: "tutor@python.org" <tutor@python.org>
>Subject: [Tutor] Using os.path.walk across platforms
>Hello. I have an interesting little challenge. I need to copy files from
>an NT server to multiple Linux servers. The Python script needs to
>execute on a UNIX server. I am using ftplib and os.path.
>My problem is that the standard 'LIST' in (ftplib) retrlines needs to be
>captured to a list so that I can check to see if a entry is a directory
>or not. If I were executing only on UNIX/Linux I could use os.path.walk
>without a problem, but I am trying to "walk" down an NT path from UNIX.
>This script:
>import os, string
>from ftplib import FTP
>def TheList(arg, dirname, names):
>         for name in names:
>                 print os.path.join(dirname, name)
>                 if os.path.isdir(name):
>                   print name + ' is a directory...'
>def GetFiles():
>   session = FTP()
>   session.connect('myserver.domain.com', port=8282)
>   session.login()
>   os.path.walk(session.retrlines('LIST'), TheList, None)
>   session.close()
>   return
>Returns this type of information:
>dr-xr-xr-x   1 owner    group               0 Dec  7  2000 Co pack
>dr-xr-xr-x   1 owner    group               0 May 29 14:52 COA
>dr-xr-xr-x   1 owner    group               0 Aug  2  8:45 HANDLING
>-r-xr-xr-x   1 owner    group           12800 Nov  4  1996 INFRZPR2.DOC
>If I could test the 1st position for 'd' then I would know that I have
>to chdir and read down the tree. Using os.path.isdir does not work
>probably because I am running my script on a UNIX server logged into an
>NT server.
>If anyone has any ideas I would appreciate it. Thank you and what a
>great language!
>Tutor maillist  -  Tutor@python.org

Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp

Tutor maillist  -  Tutor@python.org