2017-02-16 106 views
2
from mrjob.job import MRJob 
import re 

Creation_date=re.compile('CreationDate=\"[0-9]*\"[:17]') 
class Part2(MRJob): 
    def mapper(self, _, line): 
     DateOnly=Creation_date.group(0).split("=") 
     if(DateOnly > 2013): 
      yield None, 1 

    def reducer(self, key, values): 
     yield key, sum(values) 

if __name__ == '__main__': 
    Part1.run() 

我已經編寫了MapReduce作業的Python代碼,其中CreationDate =「2010-07-28T19:04:21.300」。我必須找到創建日期在2014-01-01或之後的所有日期。但是我遇到了一個錯誤。屬性錯誤:組

回答

0

Regular expression object(的re.compile結果)沒有group方法:

>>> pattern = re.compile('CreationDate="([0-9]+)"') 
>>> pattern.group 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: '_sre.SRE_Pattern' object has no attribute 'group' 

爲了得到match object(其中有一個group方法),你需要搭配使用regex.search method對字符串的模式(line) (或regex.match method根據您的需要):

>>> pattern.search('CreationDate="2013"') 
<_sre.SRE_Match object at 0x7fac5c64e8a0> 
>>> pattern.search('CreationDate="2013"').group(1) # returns a string 
'2013' 

Creation_date = re.compile('CreationDate="([0-9]+)"') 

def mapper(self, _, line): 
    date_only = Creation_date.search(line), group(1) 
    if int(date_only) > 2013: 
     yield None, 1 

注意:修改了正則表達式以將數字部分捕獲爲一個組。並將匹配的字符串轉換爲int(比較字符串與數字2013沒有意義,或根據Python版本提出異常)

+0

:全局名稱「組」沒有定義。出現此錯誤。如何解決這個問題?謝謝。 – Gokul

+0

@ gd16,我想你沒有按照我在答案中的建議進行編碼。你能顯示你的更新代碼嗎? – falsetru

0

Creation_date只是一個正則表達式。

您需要匹配您輸入的字符串後,才能調用NameError group(0)