By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,846 Members | 1,803 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,846 IT Pros & Developers. It's quick & easy.

os.path.isdir question

P: n/a
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,
Mar 16 '08 #1
Share this Question
Share on Google+
6 Replies


P: n/a
On Mar 15, 8:12 pm, lampshade <mwolff...@gmail.comwrote:
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,
Mar 16 '08 #2

P: n/a
yoz
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.
Mar 16 '08 #3

P: n/a
On Mar 15, 9:27 pm, Benjamin <musiccomposit...@gmail.comwrote:
On Mar 15, 8:12 pm, lampshade <mwolff...@gmail.comwrote: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!
Mar 16 '08 #4

P: n/a
On Mar 16, 12:12 pm, lampshade <mwolff...@gmail.comwrote:
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.
Mar 16 '08 #5

P: n/a
On Mar 16, 2:27 am, Benjamin <musiccomposit...@gmail.comwrote:
On Mar 15, 8:12 pm, lampshade <mwolff...@gmail.comwrote: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.
Mar 16 '08 #6

P: n/a
On Mar 16, 2:27 pm, MRAB <goo...@mrabarnett.plus.comwrote:
On Mar 16, 2:27 am, Benjamin <musiccomposit...@gmail.comwrote:
On Mar 15, 8:12 pm, lampshade <mwolff...@gmail.comwrote: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))]
Mar 17 '08 #7

This discussion thread is closed

Replies have been disabled for this discussion.