2017-10-01 77 views
3

在我的語法文件句柄引用了一個文件夾,其中包括YYYYDDMM格式的版本號。例如,「v20170215」下面引用:提取串並轉換爲日期

file handle WORKING/name='ROOT\Uploads\20141001_20150930 v20170215'. 

文件句柄的版本的一部分定期更新根據需要進行處理的新數據。文件句柄總是有一個「V」之後是YYYYMMDD日期結束。

我怎麼能自動提取該文件句柄(例如,「20170215」),並創建一個日期變量最後的「年月日」串出來的嗎?

如果日期是在數據的字符串變量,我可以使用類似如下:

* Extract data, month, and year. 
compute day = number(char.substr(...),F2.0). 
compute month = number(char.substr(...),F2.0). 
compute year = number(char.substr(...),F4.0). 

* Compute date variable. 
compute Version = date.mdy(month,day,year). 
formats Version (adate10). 
execute. 

但考慮到它的語法的線我需要解析,我懷疑我應該尋找到Python ,但我難以理解如何解決這個問題。

+0

這哪裏是「語法」。它是否包含在一個可以用Python腳本讀取的文件中? – mhawke

+1

它包含在同一SPSS語法文件,我需要創建日期變量(並運行大量的額外代碼)。 – Larry

回答

3

我假設你無法從創建更新語法的相同源獲取更新後的引用(可能是更簡單的解決方案)。
一旦手柄被定義,你可以提取定義爲數據是這樣的:

dataset declare myhandle. 
oms/select tables/if commands=['Show'] subtypes=['File Handles']/destination format=SAV outfile='myhandle'. 
show handles. 
omsend. 
dataset activate myhandle. 

這將打開一個名爲myhandle數據集,其中可變Directory將包含在手柄定義文件的完整路徑。從已提取只有你需要的字符串 - 看看是否能爲你工作:

compute Directory=char.substr(Directory,char.index(Directory," v")+2,10). 

現在你有需要,你可以繼續把它變成一個日期和它匹配到你的數據串。

+0

非常棒!之後我提取作爲一個字符串,我把它分成月,日,年部分: '計算月數=(char.substr(目錄,5),F2.0)。 compute day = number(char.substr(Directory,7),F2.0)。 然後,我將它們轉換爲日期: compute computeMyDate = date.mdy(month,day,year)''計算MyDate = date.mdy(月,日,年) – Larry

1

假設語法來自您可以使用Python打開和處理的文件,您可以將行分割爲空格,使用切片獲取最後一個字段的日期部分,然後將其輸入datetime.strptime()以將字符串解析爲一個datetime.date對象。

>>> from datetime import datetime  
>>> s = r"file handle WORKING/name='ROOT\Uploads\20141001_20150930 v20170215'." 
>>> date_string = s.split()[-1][1:-2] 
>>> datetime.strptime(date_string, '%Y%m%d').date() 
datetime.date(2017, 2, 15)