正确使用os.path和os.join

2024-04-25 06:52:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个处理程序来处理不同子目录中的文件,但是虽然我的脚本可以查看这些文件,但它不能对它们做任何事情,因为它无法组合它们的路径。

问题部分来自这个循环:

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


Tags: 文件pathinimage路径脚本fordata
3条回答
for (path, dirs, files) in os.walk("data/"):
  for image in files: 
    file_path = os.path.join(path, image)
    # do your stuff

尝试:

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上的两个例子都是这样做的。

我想你想加入pathfile中每个filefiles

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中的目录的list。实际上,您可以修改dirs以防止os.walk进入某些目录(整洁!)。

相关问题 更多 >