os.path 和 os.join 的正确用法
我正在尝试写一个处理文件的程序,这些文件分布在不同的子文件夹里。不过,虽然我的脚本能“看到”这些文件,但却无法对它们进行任何操作,因为它无法正确拼接出这些文件的路径。
问题出在这个循环上:
for (path, dirs, files) in os.walk("data/"):
for image in files:
#do something to the image
现在,这个脚本在data
目录的第一层工作得很好,但在data
的子目录里就不行了。
我试着使用os.path.join()
来解决这个问题:
for (path, dirs, files) in os.walk("data/"):
print os.path.join(path, dirs)
但是这会抛出以下错误:
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'
简单来说,我想做的是从data
拼接出一个路径,这个路径要包含data
的子目录里的图片。请问有什么好的方法可以做到这一点呢?
3 个回答
1
这段代码的意思是……
首先,它会做一些准备工作,比如设置一些变量或者加载需要的资源。接着,它会进入一个循环,这个循环会重复执行一些操作,直到满足特定条件为止。最后,当条件满足后,它会跳出循环,继续执行后面的代码。
在这个过程中,可能会有一些判断,比如检查某个值是否符合要求,如果不符合,就会执行不同的操作。这种方式让程序能够根据不同的情况做出不同的反应。
总的来说,这段代码的结构就是先准备、再循环处理、最后根据条件做出决策。这样可以让程序更加灵活和高效。
for (path, dirs, files) in os.walk("data/"):
for image in files:
file_path = os.path.join(path, image)
# do your stuff
2
试试这个:
for (path, dirs, files) in os.walk("data/"):
for image in files:
fname = os.path.join(path, image)
file = open(fname, 'rb')
在os.walk 的文档中,有两个例子正好展示了这个功能。
10
我觉得你想要把每个files
里的file
和path
连接起来。
for path,dirs,files in os.walk('data/'):
for f in files:
fname = os.path.join(path,f)
assert(os.path.exists(fname))
dirs
是一个包含在path
目录下的文件夹列表。你实际上可以直接修改dirs
,这样可以防止os.walk
进入某些特定的文件夹(这很酷!)。