ジオプロセシングを実行しようとしています。私のタスクは、ディレクトリ内のすべてのシェープファイルを見つけ、ディレクトリ内でそのシェープファイルのフルパス名を見つけることです。シェープファイルの名前は取得できますが、そのシェープファイルのフルパス名を取得する方法がわかりません。
shpfiles = []
for path, subdirs, files in os.walk(path):
for x in files:
if x.endswith(".shp") == True:
shpfiles.append[x]
_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")]
_
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))
何故なの 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']