我的数据中的日期以两种不同的格式存储:
Dienstag 31. Dezember 2013
和30. 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
语句)?
感谢。
答案 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
简单,优雅,可重复使用。
答案 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