From: Carlos Daniel Ruvalcaba Valenzuela <[EMAIL PROTECTED]> Date: Jun 2, 2006 11:10 PM Subject: Re: [Tutor] Trouble with os.path.isfile To: "Carroll, Barry" <[EMAIL PROTECTED]>
Here is the problem IMO: I did some modifications to your code (very minimal on ifs) and it worked: import os def lstdirsnfiles(tdir): flst = os.listdir(tdir) flst.sort() fnames = [] dnames = ['.', '..'] for name in flst: absfn = os.path.join(tdir, name) if os.path.isdir(absfn): dnames.append(name) if os.path.isfile(absfn): fnames.append(name) return (dnames, fnames) (dirs, files) = lstdirsnfiles('/home/clsdaniel') It returns correctly all directories and files. Regards Carlos Daniel Ruvalcaba Valenzuela On 6/2/06, Carroll, Barry <[EMAIL PROTECTED]> wrote: > > > > > Greetings: > > > > One of the functions of my test system web server program is to allow the > user to view the contents of the image file directories and select files to > load onto the hardware. Obviously, a central part of this function is to > identify and display the names of directories and files in a specified > directory. I haven't been able to find any canned code or cookbook entries > that do this, so I'm making one from scratch. Here is the helper function > that gets and returns the directory and file names: > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > def lstdirsnfiles(tdir): > > flst = os.listdir(tdir) > > flst.sort() > > fnames = [] > > dnames = ['.', '..'] > > for name in flst: > > absfn = os.path.join(tdir, name) > > if os.path.isdir(absfn): > > dnames.append(name) > > elif os.path.isfile(absfn): > > fnames.append(name) > > return dnames, fnames > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > > > The root of the image file directory tree is "/home/iip/images". When > lstdirsnfiles is run with tdir set appropriately, the lists returned > contain no additional information: dnames = ['.', '..'] and fnames = []. I > added some tracing statements to see what was happening inside the > function: > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > def lstdirsnfiles(tdir): > > global DEBUG, dbgfname > > DEBUG = True > > > > flst = os.listdir(tdir) > > flst.sort() > > fnames = [] > > dnames = ['.', '..'] > > > > if DEBUG: > > dbgf = open(dbgfname,mode="a") > > dbgf.write("\n"+str (time.localtime())+"\n") > > dbgf.write("Entering lstdirsnfiles\n") > > dbgf.write("The directory = %s\n" % tdir) > > dbgf.write("The file list = %s\n" % flst) > > > > for name in flst: > > absfn = os.path.join(tdir, name) > > > > if DEBUG: > > dbgf.write("File path = %s, isfile = %s\n" % > > (absfn, os.path.isfile(absfn))) > > > > if os.path.isdir(absfn): > > dnames.append(name) > > elif os.path.isfile(absfn): > > fnames.append(name) > > > > if DEBUG: > > dbgf.write("dnames = %s\n" % dnames) > > dbgf.write("fnames = %s\n" % fnames) > > dbgf.close() > > DEBUG = False > > > > return dnames, fnames > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > > > The log vile received the following: > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > (2006, 6, 2, 15, 23, 4, 4, 153, 1) > > Entering lstdirsnfiles > > The directory = /home/iip/images > > The file list = ['test1.bmp', 'test2.bmp', 'test3.bmp', 'test4.bmp', > 'test5.bmp', 'test6.bmp'] > > File path = /home/iip/images/test1.bmp, isfile = False > > File path = /home/iip/images/test2.bmp, isfile = False > > File path = /home/iip/images/test3.bmp, isfile = False > > File path = /home/iip/images/test4.bmp, isfile = False > > File path = /home/iip/images/test5.bmp, isfile = False > > File path = /home/iip/images/test6.bmp, isfile = False > > dnames = ['.', '..'] > > fnames = [] > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > > > So there are entries in the directory, but the function doesn't recognize > them as files. > > > > Finally, I opened the interpreter and tried doing this, as nearly as > possible, interactively. I got this: > > > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>> import os > > >>> tdir = '/home/iip/images' > > >>> os.listdir(tdir) > > ['test4.bmp', 'test3.bmp', 'test2.bmp', 'test1.bmp', 'test5.bmp', > 'test6.bmp'] > > >>> flst = os.listdir(tdir) > > >>> flst.sort() > > >>> flst > > ['test1.bmp', 'test2.bmp', 'test3.bmp', 'test4.bmp', 'test5.bmp', > 'test6.bmp'] > > >>> for name in flst: > > ... absfn = os.path.join(tdir,name) > > ... print absfn, "is", > > ... if not os.path.isfile(absfn): > > ... print "NOT", > > ... print "a file" > > ... > > /home/iip/images/test1.bmp is a file > > /home/iip/images/test2.bmp is a file > > /home/iip/images/test3.bmp is a file > > /home/iip/images/test4.bmp is a file > > /home/iip/images/test5.bmp is a file > > /home/iip/images/test6.bmp is a file > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > > > As you can see, the interpreter correctly identifies the strings in the list > as names of files, but my function does not. I can't see anything wrong > with the logic in the function. Can any or you see the problem I'm missing? > > > > As always, thanks in advance for your help. > > > > Barry > > [EMAIL PROTECTED] > > 541-302-1107 > > ________________________ > > We who cut mere stones must always be envisioning cathedrals. > > —Quarry worker's creed > > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > > > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor