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したいと思いますfilefilefiles

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て、特定のディレクトリに侵入しないようにすることができます(きちんと!)。

于 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ドキュメントの2つの例は、どちらもまさにこのことを行っています。

于 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 に答える