[Tutor] Trouble with os.path.isfile

Carlos Daniel Ruvalcaba Valenzuela clsdaniel at gmail.com
Sat Jun 3 08:28:21 CEST 2006


From: Carlos Daniel Ruvalcaba Valenzuela <clsdaniel at gmail.com>
Date: Jun 2, 2006 11:10 PM
Subject: Re: [Tutor] Trouble with os.path.isfile
To: "Carroll, Barry" <Barry.Carroll at psc.com>


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 <Barry.Carroll at psc.com> 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
>
> barry.carroll at psc.com
>
> 541-302-1107
>
> ________________________
>
> We who cut mere stones must always be envisioning cathedrals.
>
> —Quarry worker's creed
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>
>
>


More information about the Tutor mailing list