I’m trying to write a handler that acts on files within various subdirectories, but while my script can see these files, it cannot do anything with them because it fails to assemble their paths.
The problematic part comes from this loop:
for (path, dirs, files) in os.walk("data/"): for image in files: #do something to the image
Now, the script works in the first level of the
data directory, but fails to work on
I tried using
for (path, dirs, files) in os.walk("data/"): print os.path.join(path, dirs)
But that throws the following:
Traceback (most recent call last): File "bench.py", line 26, in <module> print os.path.join(path, dirs) File "/usr/lib/python2.7/posixpath.py", line 75, in join if b.startswith('/'): AttributeError: 'list' object has no attribute 'startswith'
In short, what I’d like to do is assemble a path from
data to the image which includes
data‘s subdirectories. What’s the best practice for doing this?
I think that you want to join
file for each
for path,dirs,files in os.walk('data/'): for f in files: fname = os.path.join(path,f) assert(os.path.exists(fname))
dirs is a
list of directories which are in the directory
path. You can actually modify
dirs in place to prevent
os.walk from walking into into certain directories (neat!).