[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

os.path.isdir question

mw

3/16/2008 1:12:00 AM

Hello,

I'm having some problems with os.path.isdir I think it is something
simple that I'm overlooking.

#!/usr/bin/python
import os

my_path = os.path.expanduser("~/pictures/")
print my_path
results = os.listdir(my_path)
for a_result in results:
if os.path.isdir(str(my_path) + str(a_result)):
results.remove(a_result)

for x in results: print x

The problem is, that the directories are never removed. Can anyone
point out what I'm missing that is causing the bug? Is there a better
way of doing this?

Thanks,
6 Answers

Benjamin

3/16/2008 2:27:00 AM

0

On Mar 15, 8:12 pm, lampshade <mwolff...@gmail.com> wrote:
> Hello,
>
> I'm having some problems with os.path.isdir I think it is something
> simple that I'm overlooking.
>
> #!/usr/bin/python
> import os
>
> my_path = os.path.expanduser("~/pictures/")
> print my_path
> results = os.listdir(my_path)
> for a_result in results:
> if os.path.isdir(str(my_path) + str(a_result)):
Try if os.path.isdir(os.path.join(my_path, a_result)):
> results.remove(a_result)
>
> for x in results: print x
>
> The problem is, that the directories are never removed. Can anyone
> point out what I'm missing that is causing the bug? Is there a better
> way of doing this?
You should always use os.path.join to join paths. You shouldn't add
them like normal strings. I suspect you're getting a combination which
doesn't exist, so it isn't a dir. :)
>
> Thanks,

yoz

3/16/2008 2:28:00 AM

0

lampshade wrote:
> Hello,
>
> I'm having some problems with os.path.isdir I think it is something
> simple that I'm overlooking.
>
> #!/usr/bin/python
> import os
>
> my_path = os.path.expanduser("~/pictures/")
> print my_path
> results = os.listdir(my_path)
> for a_result in results:
> if os.path.isdir(str(my_path) + str(a_result)):
> results.remove(a_result)
>
> for x in results: print x
>
> The problem is, that the directories are never removed. Can anyone
> point out what I'm missing that is causing the bug? Is there a better
> way of doing this?
>
> Thanks,

Your code works fine for me ..

Someone will probably complain that this isn't pythonic or hopefully
come up with an even neater way but what about this:

#!/usr/bin/python
import os

my_path = os.path.expanduser("~/pictures/")
print my_path
files=os.walk(my_path).next()[2]
for x in files: print x

EdH.

mw

3/16/2008 2:34:00 AM

0

On Mar 15, 9:27 pm, Benjamin <musiccomposit...@gmail.com> wrote:
> On Mar 15, 8:12 pm, lampshade <mwolff...@gmail.com> wrote:> Hello,
>
> > I'm having some problems with os.path.isdir I think it is something
> > simple that I'm overlooking.
>
> > #!/usr/bin/python
> > import os
>
> > my_path = os.path.expanduser("~/pictures/")
> > print my_path
> > results = os.listdir(my_path)
> > for a_result in results:
> > if os.path.isdir(str(my_path) + str(a_result)):
>
> Try if os.path.isdir(os.path.join(my_path, a_result)):> results.remove(a_result)
>
> > for x in results: print x
>
> > The problem is, that the directories are never removed. Can anyone
> > point out what I'm missing that is causing the bug? Is there a better
> > way of doing this?
>
> You should always use os.path.join to join paths. You shouldn't add
> them like normal strings. I suspect you're getting a combination which
> doesn't exist, so it isn't a dir. :)
>
>
>
> > Thanks,

Thanks, that nailed it perfectly! I'll remember the os.path.join from
now on!

John Machin

3/16/2008 2:38:00 AM

0

On Mar 16, 12:12 pm, lampshade <mwolff...@gmail.com> wrote:
> Hello,
>
> I'm having some problems with os.path.isdir I think it is something
> simple that I'm overlooking.
>
> #!/usr/bin/python
> import os
>
> my_path = os.path.expanduser("~/pictures/")
> print my_path
> results = os.listdir(my_path)
> for a_result in results:
> if os.path.isdir(str(my_path) + str(a_result)):

Not parts of the problem, but:
(1) you don't need to use str() here.
(2) use os.path.join instead of the + operator, if you are interested
in portable code.

> results.remove(a_result)
>
> for x in results: print x
>
> The problem is, that the directories are never removed. Can anyone
> point out what I'm missing that is causing the bug? Is there a better
> way of doing this?
>
> Thanks,

You are removing directory *NAMES* from the container named "results".
If you want to remove the directories from your filesystem, use
os.rmdir.

MRAB

3/16/2008 7:28:00 PM

0

On Mar 16, 2:27 am, Benjamin <musiccomposit...@gmail.com> wrote:
> On Mar 15, 8:12 pm, lampshade <mwolff...@gmail.com> wrote:> Hello,
>
> > I'm having some problems with os.path.isdir I think it is something
> > simple that I'm overlooking.
>
> > #!/usr/bin/python
> > import os
>
> > my_path = os.path.expanduser("~/pictures/")
> > print my_path
> > results = os.listdir(my_path)
> > for a_result in results:
> > if os.path.isdir(str(my_path) + str(a_result)):
>
> Try if os.path.isdir(os.path.join(my_path, a_result)):> results.remove(a_result)
>
> > for x in results: print x
>
> > The problem is, that the directories are never removed. Can anyone
> > point out what I'm missing that is causing the bug? Is there a better
> > way of doing this?
>
> You should always use os.path.join to join paths. You shouldn't add
> them like normal strings. I suspect you're getting a combination which
> doesn't exist, so it isn't a dir. :)
>
You are also removing items from 'results' while iterating over it,
which has an undefined behaviour. It would be better to build a new
list of those that aren't directories.

Benjamin

3/17/2008 1:27:00 AM

0

On Mar 16, 2:27 pm, MRAB <goo...@mrabarnett.plus.com> wrote:
> On Mar 16, 2:27 am, Benjamin <musiccomposit...@gmail.com> wrote:
>
> > On Mar 15, 8:12 pm, lampshade <mwolff...@gmail.com> wrote:> Hello,
>
> > > I'm having some problems with os.path.isdir I think it is something
> > > simple that I'm overlooking.
>
> > > #!/usr/bin/python
> > > import os
>
> > > my_path = os.path.expanduser("~/pictures/")
> > > print my_path
> > > results = os.listdir(my_path)
> > > for a_result in results:
> > > if os.path.isdir(str(my_path) + str(a_result)):
>
> > Try if os.path.isdir(os.path.join(my_path, a_result)):> results.remove(a_result)
>
> > > for x in results: print x
>
> > > The problem is, that the directories are never removed. Can anyone
> > > point out what I'm missing that is causing the bug? Is there a better
> > > way of doing this?
>
> > You should always use os.path.join to join paths. You shouldn't add
> > them like normal strings. I suspect you're getting a combination which
> > doesn't exist, so it isn't a dir. :)
>
> You are also removing items from 'results' while iterating over it,
> which has an undefined behaviour. It would be better to build a new
> list of those that aren't directories.

This list comprehension should do the trick pythonically:
final_results = [a_result for a_result in results if
os.path.isdir(os.path.join(my_path, a_result))]