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

2024-03-29 13:03:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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语句)时,有没有方法告诉Python? 谢谢。你知道吗


Tags: 数据脚本dateif格式countlineyear
3条回答

我不知道你是否有强迫性,但正则表达式更适合这种问题。最好的一点是,它非常健壮,但非常灵活->;如果您希望有更多的格式(可能是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

简单,优雅,可重复使用。你知道吗

如果有的话,只要第二个图案以数字开头

if (date[0].isdigit()):

      ***method for pattern2***
else:

      ***method for pattern1***

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

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

相关问题 更多 >