2016-03-01 61 views
0

我正在做的事情的本質是基於GIS,由我的問題是基於python,這就是爲什麼我在這裏發佈。在壓縮列表中指定具有循環的輸出路徑

我有4個文件夾包含光柵文件(.tif文件)。我正在對它們執行操作,然後將輸出保存到特定位置。這是我的問題所在,指定我的輸出路徑。

我使用的代碼如下:

import arcpy 
from arcpy.sa import * 

#set pathway to rasters 
arcpy.env.workspace=r'F:\Sheyenne\Normalized_Indices\Fuzzy_Overlay\NDVI' 
NDVIraster=arcpy.ListRasters('*tif') 
arcpy.env.workspace=r'F:\Sheyenne\Normalized_Indices\Fuzzy_Overlay\NDII' 
NDIIraster=arcpy.ListRasters('*tif') 
arcpy.env.workspace=r'F:\Sheyenne\Normalized_Indices\Fuzzy_Overlay\RGR' 
RGRraster=arcpy.ListRasters('*tif') 
arcpy.env.workspace=r'F:\Sheyenne\Normalized_Indices\Fuzzy_Overlay\SWIR32' 
SWIR32raster=arcpy.ListRasters('*tif') 

#set the output pathway 
outpath='F:\Sheyenne\Normalized_Indices\Fuzzy_Membership\\' 

#run my operation 
for ndvi, ndii, rgr, swir32, in zip(NDVIraster, NDIIraster,RGRraster, SWIR32raster): 
    outpath=outpath + ndvi 
    outraster= arcpy.gp.FuzzyOverlay_sa([ndvi, ndii, rgr, swir32], outpath, "AND") 

所以我想我的輸出路徑由初始outpath的組合和文件的ndvi名稱。當我打印outpath,雖然它通過保存到第一個文件名開始,然後第二個文件被保存到第一個文件名和第二個文件名。所以輸出一個是file1.tif,輸出兩個是file1.tiffile2.tif,輸出三個是file1.tiffile2.tiffile3.tif等

我該如何保存到ndvi的相應文件名,而不是使用迭代不斷添加名稱?

+0

這是因爲outpath不會重置爲每個循環的基路徑。它會保留它的價值。您可以處理這兩種方式,在添加初始化值之前將其移動到循環中。或者,我會推薦的是將'outpath'的名稱更改爲'outroot'並將添加更改爲'outpath = outroot + ndvi' – TehCorwiz

回答

1

只需在重新添加內容之前重置超出路徑即可。

#run my operation 
for ndvi, ndii, rgr, swir32, in zip(NDVIraster, NDIIraster,RGRraster,SWIR32raster): 
    outpath='F:\Sheyenne\Normalized_Indices\Fuzzy_Membership\\' 
    outpath=outpath + ndvi 
    outraster= arcpy.gp.FuzzyOverlay_sa([ndvi, ndii, rgr, swir32], outpath, "AND") 
0

您正在覆蓋outpath變量。您需要使用2個變量來處理您想要的方式,例如使用outpath_base作爲根。

#set the output pathway 
outpath_base='F:\Sheyenne\Normalized_Indices\Fuzzy_Membership\\' 

#run my operation 
for ndvi, ndii, rgr, swir32, in zip(NDVIraster, NDIIraster,RGRraster, SWIR32raster): 
    outpath=outpath_base + ndvi 
    outraster= arcpy.gp.FuzzyOverlay_sa([ndvi, ndii, rgr, swir32], outpath, "AND")