2016-06-24 17 views
1

私はこの問題を回避することができますが、なぜそれが問題なのかを知りたいのです。フィルタ機能以下のコードで は、Unicode文字列のリストではなく、日時はis_date_stringがPython関数はdatetimeオブジェクトの代わりにuncodeの文字列を返します

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関数についての質問はありませんdatetimeオブジェクト。どうして?

答えて

5

Filterフィルタリングを行うために関数の結果を使用しますが、戻り値はiterableのサブセットです(これは文字列です)。

何がしたいことは関数がNone[item for item in iterable if item]ない場合には、フィルタ(機能、反復可能)が[item for item in iterable if function(item)]と等価であることをドキュメント

noteからこの

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

https://docs.python.org/2/library/functions.html#filter のようなものです関数がNoneの場合

+0

ありがとう、私はフィルタの仕組みを誤解しました。私が必要としたのはリストの理解だけでした。これは、x ['xのマップでは(is_date_string、datestrings.findall(request.text))' x ' – knowingpark

関連する問題