【发布时间】:2012-10-07 15:43:35
【问题描述】:
我只是在测试一个小的 python 脚本,我将在更大的脚本中使用它的一部分。基本上我正在尝试在 CSV 文件中查找一个字段(其中包含一个正则表达式),并在正则表达式测试中使用它。原因是(一个非常奇怪的用例的一部分)并且可以更轻松地维护 CSV 文件而不是脚本。以下是我缺少的东西......
test.csv:
field0,field1,field2
foo,bar,"\d+\.\d+"
bar,foo,"\w+"
test.py(额外的print用于测试):
import sys
import re
import csv
input = sys.argv[1]
print input
reader = csv.reader(open('test.csv','rb'), delimiter=',', quotechar="\"")
for row in reader:
print row
value = row[0]
print value
if value in input:
regex = row[2]
print regex
pat = re.compile(regex)
test = re.match(pat,input)
out = test.group(1)
print out
如果我将“foo blah 38902462986.328946239846”之类的值传递给脚本,我希望它会发现它包含foo,然后使用正则表达式\d+\.\d+ 来提取38902462986.328946239846。但是,当我运行脚本时,我得到以下信息:
foo blah 0920390239.90239029
['field0', 'field1', 'field2']
field0
['foo', 'bar', '\\d+\\.\\d+']
foo
\d+\.\d+
Traceback (most recent call last):
File "reg.py", line 19, in <module>
out = test.group(1)
AttributeError: 'NoneType' object has no attribute 'group'
不知道到底发生了什么。
P.S Python 是一个广阔的世界,仍在学习。
【问题讨论】:
-
您的代码似乎识别不正确。如果 test 是 None 那么 re.match 失败(这就是失败时返回的内容)。这可能是因为 re.match 需要一个字符串作为第一个参数,而不是编译模式。