Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

os.path.isdir question

83 views
Skip to first unread message

lampshade

unread,
Mar 15, 2008, 9:12:21 PM3/15/08
to
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,

Benjamin

unread,
Mar 15, 2008, 10:27:07 PM3/15/08
to
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

unread,
Mar 15, 2008, 10:27:46 PM3/15/08
to

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.

lampshade

unread,
Mar 15, 2008, 10:33:55 PM3/15/08
to

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

John Machin

unread,
Mar 15, 2008, 10:37:56 PM3/15/08
to
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

unread,
Mar 16, 2008, 3:27:30 PM3/16/08
to
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

unread,
Mar 16, 2008, 9:27:06 PM3/16/08
to

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))]

0 new messages