strptime()具有不同的输入数据

时间:2018-04-13 11:55:24

标签: python datetime

在我的时间之前,一些稳定的天才将他们的日期作为字符串写入数据库。不仅如此,格式也各不相同。我至少

05.08.1993

31.08.1993 00:00:00

现在我想使用strptime()将它们转换为datetime对象,例如

my_date = datetime.datetime.strptime(my_value, '%d.%m.%y')

所以现在我必须处理不同的格式。我可以想到各种各样的笨拙的方法来实现这一点,包括ifs或trys的丑陋级联。是否有一种优雅的方式来做到这一点?

4 个答案:

答案 0 :(得分:3)

我建议您使用 python dateutil

<强>演示:

08.05.93
31.08.93

<强>输出:

import re
import datetime

a = "05.08.1993"
b = "31.08.1993 00:00:00"
d = re.search("\d{2}.\d{2}.\d{4}", a)
if d:
    print(datetime.datetime.strptime(d.group(),'%d.%m.%Y').strftime('%d.%m.%y'))

d = re.search("\d{2}.\d{2}.\d{4}", b)
if d:
    print(datetime.datetime.strptime(d.group(),'%d.%m.%Y').strftime('%d.%m.%y'))

使用Regex:

05.08.93
31.08.93

<强>输出:

class AutoEncoder(nn.Module):
    def __init__(self, inp_size, hid_size):
        super(AutoEncoder, self).__init__(

        self.lambd = 1. 

        # Encoder
        self.e1 = nn.Linear(inp_size, hid_size)

        # Decoder
        self.d1 = nn.Linear(hid_size, inp_size)
        self.sigmoid = nn.Sigmoid()    

        pass

   def forward(self,x):
       encode = self.e1(x)
       decode = self.sigmoid(self.d1(encode))
       return decode

   def loss_function(self, recon_x, x):
       l2_loss = nn.MSELoss()

       # Here I would like to compute the L1 regularization of the weight parameters
       loss = l2_loss(recon_x, x) + self.lambd(l1_loss(self.e1) + l1_loss(self.e2))
       return loss

答案 1 :(得分:1)

dateutil.parser

  

此模块提供通用日期/时间字符串解析器,能够解析大多数已知格式以表示日期和/或时间。

     

该模块试图对不太可能的输入格式宽容,即使对于不明确的日期也返回日期时间对象。

答案 2 :(得分:0)

对于您提到的2种数据类型,应该足以利用切片:

extension UILabel {
func setRoundEdge() {
   let radius = self.frame.height/2
    self.layer.borderWidth = 0.3
    self.layer.masksToBounds = false
    self.layer.borderColor = UIColor.black.cgColor
    self.layer.cornerRadius = radius
    self.layer.masksToBounds = true
}

对于更强大的方法,您可以使用通用日期解析器,如其他答案所述。

答案 3 :(得分:0)

如果只有2种模式,可以使用re

来完成
dates = ('05.08.1993', '31.08.1993 00:00:00')
pattern = re.compile(r'\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}:\d{2}')
strp_pattern = '%d.%m.%Y %H:%M:%S'
strp_pattern_fallback = '%d.%m.%Y'

def parse_dates(dates):
    for date in dates:
        if pattern.match(date):
            yield datetime.datetime.strptime(date, strp_pattern)
        else:
            yield datetime.datetime.strptime(date, strp_pattern_fallback)

list(parse_dates(dates))
[datetime.datetime(1993, 8, 5, 0, 0), datetime.datetime(1993, 8, 31, 0, 0)]