私は販売レコードを含む SQLite テーブルを持っています - フィールド 13 に配送価格があります - 基本的に 3 つの可能性があります:
価格:例えば。£15.20 無料 指定なし
問題は、これらの単語だけが常に存在するとは限らないことです。「送料は£15.20」または「送料無料」と言うことができます-前述の可能性に正規化する必要があります. 私は正規表現を使用します:
def correct_shipping(db_data):
pattern=re.compile("\£(\d+.\d+)") #search for price
pattern_free=re.compile("free") #search for free shipping
pattern_not=re.compile("not specified") #search for shipping not specified
for every_line in db_data:
try:
found=pattern.search(every_line[13].replace(',','')).group(1)
except:
try:
found=pattern_free.search(every_line[13]).group()
except:
found=pattern_not.search(every_line[13]).group()
if found:
query="UPDATE MAINTABLE SET Shipping='"+found+"' WHERE Id="+str(every_line[0])
db_cursor.execute(query)
db_connection.commit()
しかし、このコードは例外を発生
AttributeError: 'NoneType' object has no attribute 'group'
させています。パターンが見つからないため、フォーム「5.20」の最初の結果がトリガーされます。
問題は、文字列を適切に検索する方法 (try/except はまったく必要ですか?)、または文字列が見つからない場合に例外を無視する方法です (ただし、これはあまり良い解決策ではありませんか?)