我只是測試了一個小型的Python腳本,我將其用於更大的腳本中。基本上我試圖查找一個CSV文件中的字段(它包含一個正則表達式),並在正則表達式測試中使用它。原因是(非常奇怪的用例的一部分),並且將使維護CSV文件更容易,而不是腳本。有什麼我用下面的失蹤....Python:使用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是一個大世界仍然學習。
你的代碼看起來不正確idented。如果test爲None,則re.match失敗(這是失敗時返回的結果)。這可能是因爲re.match期望一個字符串作爲第一個參數,而不是編譯模式。 – cdleonard