Skip to main content
 首页 » 编程设计

Python 函数返回未编码字符串而不是日期时间对象

2025年05月04日42sky-heaven

我有解决此问题的方法,但我想知道为什么会出现问题。 在下面的代码中,过滤器函数是一个 unicode 字符串列表,而不是 is_date_string 生成的日期时间对象

import re 
import requests 
 
datestrings = re.compile(r'\d*-\d*-\d* \d*:\d*:\d*') 
 
def is_date_string(s): 
    try: 
        return datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S') 
    except: 
        return False 
 
d = filter(is_date_string,datestrings.findall(request.text)) 

这是正则表达式生成的数据示例:

 DATESTRINGS =  
    [u'2016-06-24 05:36:42', u'2016-06-24 04:53:02', u'2016-06-24 04:53:02', u'2016-06-24 04:53:02', u'2016-06-24 04:53:02', u'2016-06-24 04:53:02', u'2016-06-24 04:53:02', u'2016-06-24 04:53:03', u'2016-06-24 04:53:04', u'2016-06-24 04:53:04', u'2016-06-24 04:53:04', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:05', u'2016-06-24 04:53:', u'2016-06-24 05:18:56', u'2016-06-24 05:36:43', u'2016-06-27 05:00:00'] 

我的解决方法是对 d 进行列表理解,以执行函数应执行的操作

dates = [datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S') for x in d if x]  

但是问题是关于 is_date_string 函数不返回日期时间对象。为什么?

请您参考如下方法:

过滤器使用函数的结果进行过滤,但返回值是可迭代对象的子集,在您的例子中是一个字符串。

你想要的似乎是这样的

d = filter(None, map(is_date_string,datestrings.findall(request.text)))

https://docs.python.org/2/library/functions.html#filter 来自文档

Note that filter(function, iterable) is equivalent to [item for item in iterable if function(item)] if function is not None and [item for item in iterable if item] if function is None.