在for循环中切换日期格式;蟒蛇

时间:2015-06-11 11:45:56

标签: python date if-statement for-loop

我的数据中的日期以两种不同的格式存储:

Dienstag 31. Dezember 201330. Juni 2007

我编写了脚本以从两种格式中提取Year/Month/Day并将它们存储在列表中:

for row in reader:
    line_count = line_count + 1
    if row[1] == "DATE":
        pass
    else:
        date = row[1].encode('utf-8')
        year = date.split('.')[1].split(" ")[2]
        day = date.split(" ")[0]
        day = day.replace('.', '')
        month = date.split('.')[1].split(' ')[1]

表示第一种格式

date = row[1].encode('utf-8')
year = date.split('.')[1].split(" ")[2]
day = date.split(" ")[0]
day = day.replace('.', '')
month = date.split('.')[1].split(' ')[1]

表示第二种格式

然而,这些日期格式在整个数据集(row[1])中随机出现。有没有办法告诉Python何时遇到使用相应脚本的格式之一(如if语句)? 感谢。

4 个答案:

答案 0 :(得分:2)

仅当第二个模式以数字

开头时才有
if (date[0].isdigit()):

      ***method for pattern2***
else:

      ***method for pattern1***

答案 1 :(得分:2)

不知道是否有强迫症,但正则表达式更适合此类问题。最好的部分是,它非常强大而且灵活 - >如果您期望更多格式(可能是美国风格,如2004年1月31日),您可以轻松地进行修改。五行代码而不是原始代码15;)

以下是代码:

import re

reg_date = "(Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonntag)*\s*(\d{1,2})\.\s+(\w{3,12})\s(\d{2,4})"

def extract_date(string):
    results = re.search(reg_date, string)
    if results:
        date = results.groups()
        return date[1], date[2], date[3] 

要使用它,只需写一行如下:

day,month,year = extract_date("Dienstag 31. Dezember 2013 and ")
print day,month,year

或其他第二种格式的实验

day,month,year = extract_date("31. May 2013 ")
print day,month,year

enter image description here

简单,优雅,可重复使用。

答案 2 :(得分:1)

您可以检查字符串中的第一个字符是否为alpha。

if date[0].isalpha():
    # call your function for German dates here
else:
    # call the other function

答案 3 :(得分:0)

另一种使用正则表达式的方法,只是为了给你更多选择:

import re

if (re.search('^[a-zA-Z]',date):
    #Method for First Format
else:
    #Method for Second Format