web-dev-qa-db-ja.com

os.walk()を使用して特定のファイルのパスが必要

ジオプロセシングを実行しようとしています。私のタスクは、ディレクトリ内のすべてのシェープファイルを見つけ、ディレクトリ内でそのシェープファイルのフルパス名を見つけることです。シェープファイルの名前は取得できますが、そのシェープファイルのフルパス名を取得する方法がわかりません。

shpfiles = []
for path, subdirs, files in os.walk(path):
    for x in files:
        if x.endswith(".shp") == True:
            shpfiles.append[x]
23
Schack

_os.walk_は、ループの最初の値としてディレクトリへのパスを提供します。os.path.join()を使用して完全なファイル名を作成します。

_shpfiles = []
for dirpath, subdirs, files in os.walk(path):
    for x in files:
        if x.endswith(".shp"):
            shpfiles.append(os.path.join(dirpath, x))
_

ループのpathの名前をdirpathに変更し、既にos.walk()に渡したpath変数と競合しないようにしました。

.endswith() == True;の結果をテストする必要がないことに注意してください。 ifは既にそれを行っており、_== True_部分は完全に冗長です。

.extend()とジェネレーター式を使用して、上記のコードをもう少しコンパクトにすることができます。

_shpfiles = []
for dirpath, subdirs, files in os.walk(path):
    shpfiles.extend(os.path.join(dirpath, x) for x in files if x.endswith(".shp"))
_

または、1つのリストの内包として:

_shpfiles = [os.path.join(d, x)
            for d, dirs, files in os.walk(path)
            for x in files if x.endswith(".shp")]
_
60
Martijn Pieters

os.path.abspath(finename)が動作するようです。してみてください。

shpfiles = []
for path, subdirs, files in os.walk(path):
    for x in files:
        if x.endswith(".shp") == True:
            shpfiles.append(os.path.join(path, x))
0
gsmaker

何故なの import glob

import glob 

print(glob.glob('F:\OTHERS\PHOTOS\Panama\\mai13*\\*.jpg') )

そして、私は絶対パスで、私が欲しいすべてのJPEGを取得します

>>> 
['F:\\OTHERS\\PHOTOS\\Panama\\mai13\\03052013271.jpg', 
'F:\\OTHERS\\PHOTOS\\Panama\\mai13\\05052013272.jpg', 
'F:\\OTHERS\\PHOTOS\\Panama\\mai13\\05052013273.jpg']
0
kiriloff