我有解决此问题的方法,但我想知道为什么会出现问题。 在下面的代码中,过滤器函数是一个 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 notNoneand[item for item in iterable if item]if function isNone.
