41

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

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

3 に答える 3

97

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た変数と競合しないように名前を変更しました。pathos.walk()

.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")]
于 2013-05-09T15:27:48.090 に答える
0

動作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))
于 2013-05-09T15:31:40.967 に答える
0

なぜ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']
于 2013-05-09T15:36:17.370 に答える