2015-11-28 40 views
0

如何編寫if語句來試圖確定變量是否爲格式爲%Y-%m-%d或%Y-%的日期M&如果「它是日期」,那麼「按照我說的去做」 -

像這樣:

for i in list: 
    for element in i: 
     if element is a date: 
      list2.append(element) 

其中列表是: [ '日期', '值'],[ '2002-03','12 .9' ]]

我的是: [ '日期', '值']和[ '2002-03','12 0.9 ']

元素是: '日期', '值', '2002-03','12 0.9'

+1

這個包可以幫助您確定適用於日期格式datetime.datetime.strptime變量(元素,「%Y-%間%d」) – Zohar81

+0

我應該datetime.datetime.strptime代以「日期」 (date_text,'%Y-%m-%d'),使行看起來像「如果元素是datetime.datetime.strptime(date_text,'%Y-%m-%d')」? – abutremutante

+0

你的元素是什麼類型的對象?你有我們的一些樣本輸入數據嗎? –

回答

2

假設你的輸入是一個字符串,喲你可以使用datetime包進行以下驗證。

try: 
    datetime.datetime.strptime(str, '%Y-%m-%d') 
except ValueError: 
    raise ValueError("format should be YYYY-MM-DD") 

適應給你的場景:

list = [['Date', 'Value'], ['2002-03', '12.9'],['2001-01','11.6']] 
list2=[] 
for i in list: 
    for element in i: 
     try: 
      datetime.datetime.strptime(element, '%Y-%m') 
      list2.append(element) 
     except ValueError: 
      continue 
print list2 

產量爲:

['2002-03', '2001-01'] 
+0

它讓我感到一種SyntaxError:無效的語法 – abutremutante

+0

不要使用'str'作爲變量名稱,因爲'str()'函數。 –

+0

@abutremutante,我現在檢查它,它應該沒問題。 – Zohar81

1

一種解決方案是編寫試圖分析價值日期的功能,遍歷所有您想要支持的格式。如果能夠解析,返回True(或者,你可以返回分析得到的值),並返回False如果沒有的格式工作:

def is_date(s): 
    for format in ('%Y-%m-%d', '%Y-%m'): 
     try: 
      d = datetime.strptime(s , format) 
      return True 
     except ValueError: 
      pass 
    return False 

將此應用於你的代碼,它是這樣的:

for i in list: 
    for element in i: 
     if is_date(element): 
      list2.append(element) 
+0

它返回所有false:/如果它是一個字符串,它不認爲是一個日期? – abutremutante

+0

@abutremutante:如果它返回false,則表示傳入的數據無效。當我使用'list = [['Date','Value'],['2002-03','12.9'],['2001-01','11.6']]'這樣的數據對我來說很有用。 –

相關問題