2014-04-10 52 views
0

所以我嘗試了幾種方法來搜索我的問題,但似乎沒有給我確切的答案,我正在尋找。這裏是我的上下文代碼:在列表中創建一個'或'語句Python

# Import arcpy module 
import arcpy 
arcpy.env.overwriteOutput = True 
arcpy.env.workspace = "F:\\dir" 

# Check out any necessary licenses 
arcpy.CheckOutExtension("spatial") 

# Local variable: 
Inpoints = "F:\\dir\\x.shp" 

fdata = "_01,_02,_03,_04,_05,_06,_07,_08,_09,_10,_11,_12" 
fdata = fdata.split(",") 

#initalizing the list 
Inraster = [] 

#build list of inputs 
    for year in range (1983, 2014): 
    for line in fdata: 
     date = str(year)+line 
     Inraster1 = ["rfe"+date+".tif", date] 

    Inraster.append(Inraster1) 

# Process: Extract Multi Values to Points 

arcpy.gp.ExtractMultiValuesToPoints_sa(Inpoints, Inraster, "NONE") 

對於FDATA線,我想它爲已讀或未,所以它不搜索每個柵格一些在範圍內的光柵不同年份的唐(例如 - 1985年的第1個月可能存在,但2003年的第1個月不存在)。

不確定這是否合理?

(注:使用Python 2.7)

+0

你怎麼知道'rfe1983_01.tif'存在,但'rfe2003_01.tif'不? –

+0

我有一個很大的數據集,從1979年開始,現在我需要通讀和提取數據。我已經瀏覽了這個列表,看看什麼都沒有,所以我沒有編寫單獨的代碼,而是希望將它合併爲一個。 – Sesmith926

+0

我不知道你是如何創建數據集的(你的桌面上是文件嗎?它是一個excel文件嗎?一個文檔?一個JSON?一個醃製列表?它是否存儲在內存中?平板電腦?),但它似乎微不足道簡單地參考該列表,而不是建立一個全新的... –

回答

3
import os 

BASEDIR = "f:\\dir" 

#build list of inputs 
Inraster = [] 
for year in range (1983, 2014): 
    for month in range(1, 13): 
     fname = "ref{:04d}_{:02d}.tif".format(year, month) 
     # is there actually a file by this name? 
     if os.path.isfile(os.path.join(BASEDIR, fname)): 
      Inraster.append(fname) 
+0

我覺得這是一個額外的不必要的步驟。我們不能僅僅在'os.listdir(BASEDIR)'上使用正則表達式來檢查'r「ref(?:19 | 20)\ d \ d_ \ d \ d \ .tif」'並且對每個文件進行操作比建立一個可能的文件列表,然後檢查它是否存在? (無論如何+1) –