2016-11-09 46 views
3

我已經構建了一個python腳本,它首先打印上週的所有日期,然後創建兩個變量,即第一個和最後一個日期,以便我可以編寫一個表達式來查找在這些日期之間的字段中的所有日期。以下是我迄今爲止:Python的表達式來查找兩個日期之間的數據庫字段中的所有日期

import arcpy, sys, string, os, time, shutil, tempfile, logging, datetime 
# this is the current date 
now = datetime.datetime.now() 

# subtract 7 days from the current date 
SevenDaysBack = now - datetime.timedelta(days=7) 

# this is the date of the first day of last week 
now_day_1 = SevenDaysBack - datetime.timedelta(days=now.weekday()) 

dates = {} 
#this lists out all the dates of last week 
for n_week in range(1): 
    dates[n_week] = [(now_day_1 + datetime.timedelta(days=d+n_week*7)).strftime("%Y%m%d") for d in range(7)] 
##for d in range(7): 
    ##dates = [(now_day_1 + datetime.timedelta(days=d*7)).strftime("%Y%m%d")] 
print dates 

From_Date = dates[n_week][0] 
To_Date = dates[n_week][6] 
print From_Date 
print To_Date 

SaleDateExpression = [DATE_SOLD] "between" + From_Date + "and" + To_Date 
print SaleDateExpression 

的腳本工作,直到我試圖創建將在以後的函數中使用的表達。我確定它是一個語法問題,但我不知道如何使它工作。

+0

之間「我敢肯定,它的語法問題......」,不是輸出任何錯誤,當您嘗試運行呢?如果是這樣,請發佈錯誤信息。 –

+0

除非我註釋掉表達式,否則我無法通過語法錯誤來運行它。腳本的其餘部分起作用。語法錯誤突出顯示單詞「之間」。 –

回答

0

您的代碼在倒數第二行中有一個奇怪點:
SaleDateExpression = [DATE_SOLD] "between" + From_Date + "and" + To_Date

您正在談論的語法錯誤的出現是因爲[DATE_SOLD],因爲它在這裏是無效的Python;此外,它似乎沒有任何用處,因爲您沒有向我們提供任何有關DATE_SOLD的信息。

因此,取而代之的是,最後一行可能是
SaleDateExpression = [DATE_SOLD] "between" + From_Date + "and" + To_Date
這將輸出

between20161031and20161106


但是,假設你要輸出到多一點可讀,有幾件事要評論。

首先,您將創建日期作爲%Y%m%d,將年,月和日連接在一起而不帶空格,從而創建您看到的2016103120161106;爲了解決這個問題,你可以輸入%Y %m %dstrftime

其次,單詞和日期之間沒有空格。爲了解決這個問題,您可以在between之後和and之前和之後添加一個空格,如下所示"between " + From_Date + " and " + To_Date

最後,在所有這些說明,你的代碼將現在輸出

之間2016 10月31日和2016年11 06


編輯:

基於斷您的評論,似乎唯一的問題是[DATE_SOLD]不在報價單內。爲了達到您在[DATE_SOLD] between 20160601 and 20160630評論中提出的結果,您需要在strftime中使用%Y%m%d,並在between之後和and之前和之後添加空格,如上所示。這會給出所需的輸出。

[DATE_SOLD] 20160601和20160630

+0

感謝Wintro的幫助。表達式最初來自我建立的模型,它與我的腳本完成同樣的事情。當我將模型導出到腳本時,SaleDateExpression代碼如下所示:SaleDateExpression = arcpy.GetParameterAsText(0) 如果SaleDateExpression =='#'或不是SaleDateExpression: SaleDateExpression =「[DATE_SOLD] 20160601和20160630之間」和表達式在未包括的腳本部分中被進一步調用。這一個工作,但我不想在我每次運行它之前編輯腳本,所以我用 –

+0

以上的代碼替換它@ChristyWest我編輯了我的問題,問題是否解決? –

相關問題