正确使用os.path和os.join

时间:2013-03-04 19:48:18

标签: python

我正在尝试编写一个处理各个子目录中的文件的处理程序,但是当我的脚本可以看到这些文件时,它无法对它们做任何事情,因为它无法组装它们的路径。 / p>

有问题的部分来自这个循环:

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 个答案:

答案 0 :(得分:7)

我认为您希望path加入file file files

for path,dirs,files in os.walk('data/'):
    for f in files:
        fname = os.path.join(path,f)
        assert(os.path.exists(fname))

dirs是目录list中的path个目录。您实际上可以修改dirs以防止os.walk进入某些目录(整洁!)。

答案 1 :(得分:1)

尝试:

for (path, dirs, files) in os.walk("data/"):
  for image in files: 
    fname = os.path.join(path, image)
    file = open(fname, 'rb')

os.walk documentation的两个例子都是这样做的。

答案 2 :(得分:0)

for (path, dirs, files) in os.walk("data/"):
  for image in files: 
    file_path = os.path.join(path, image)
    # do your stuff