0

如果我在脚本开头声明“line”变量,则以下代码按预期工作。就像是 ...

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' 对象没有属性 'groups'

# 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'
4

2 回答 2

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:(.+)$")
于 2013-07-15T09:18:32.330 回答
0

None如果未找到匹配项,您的搜索将返回。myvalues is not None您需要在尝试访问之前进行检查groups()

于 2013-07-15T09:18:32.953 回答