7

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

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

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子目录的路径。这样做的最佳做法是什么?

4

3 回答 3

8

我认为你想path加入file每个filefiles

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

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

于 2013-03-04T19:50:44.613 回答
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 文档中的两个示例都是这样做的。

于 2013-03-04T19:51:58.290 回答
0
for (path, dirs, files) in os.walk("data/"):
  for image in files: 
    file_path = os.path.join(path, image)
    # do your stuff
于 2013-03-04T19:52:21.453 回答