2013-07-15 71 views
0

如果我在腳本的開頭聲明瞭「行」變量,則下面的代碼將按預期工作。像...屬性組不屬於對象

s = "Jul 15 12:12:51 whitelist logger: 1|999999999999|id:d9faff7c-4016-4343-b494-37028763bb66 submit date:1307130919 done date:1307130919 stat:DELIVRD err:0|L_VB3_NM_K_P|1373687445|vivnel2|L_VB3_GH_K_P|promo_camp1-bd153424349bc647|1" 

當我打開一個文件並通過行循環時,groups屬性不起作用。我得到一個錯誤:AttributeError的:「NoneType」對象有沒有屬性「組」

# cat mylast.py 
import re 

f = open('customer.csv') 

for line in f: 

     logger_re = re.compile(
    "logger: ([^ ]+)\ 
     submit date:(\d+)\ 
     done date:(\d+)\ 
     stat:(.+)\ 
     err:(.+)$") 
     myvalues = logger_re.search(line).groups() 
     print myvalues 

f.close() 

例外:

# python mylast.py 
Traceback (most recent call last): 
    File "mylast.py", line 13, in ? 
    myvalues = logger_re.search(line).groups() 
AttributeError: 'NoneType' object has no attribute 'groups' 
+0

'print repr(line)'告訴你在你的文件中有什麼? –

回答

2

你的正則表達式不匹配您的實際的文件內容。因此,logger_re.search(line)返回None

這裏的問題是,你縮進正則表達式,但沒有補償額外的空白:

logger_re = re.compile(
    "logger: ([^ ]+)\ 
     submit date:(\d+)\ 
     done date:(\d+)\ 
     stat:(.+)\ 
     err:(.+)$") 

注意,在該行的開頭有空白重要。使用單獨的字符串(Python會在編譯時加入他們的行列):

logger_re = re.compile(
    "logger: ([^ ]+) " 
    "submit date:(\d+) " 
    "done date:(\d+) " 
    "stat:(.+) " 
    "err:(.+)$") 
0

您的搜索將返回None如果沒有找到匹配。在嘗試訪問groups()之前,您需要檢查myvalues is not None