PriceStr=group[2]
price=Decimal(sub(r'[^\d.]', '', PriceStr))
在這部分代碼中,貨幣的變量字符串正在轉換爲Decimal。 這段代碼的第二行實際上是什麼意思? 爲什麼需要'sub','r',撇號,'^'等?這個字符串操作在Python中如何工作?
PriceStr=group[2]
price=Decimal(sub(r'[^\d.]', '', PriceStr))
在這部分代碼中,貨幣的變量字符串正在轉換爲Decimal。 這段代碼的第二行實際上是什麼意思? 爲什麼需要'sub','r',撇號,'^'等?這個字符串操作在Python中如何工作?
他們從不同的數字和點串刪除所有符號,
例如 「$ 1,346.9總」轉換爲「1346.9」
在Python r'string'
意味着原始字符串,即字符串,其中逃逸序列無效。例如比較:
print(r'foo bar\n')
print('foo bar\n')
在解釋爲新線的符號第二種情況\n
,而在原始字符串它只是一個斜槓和一個字母n
。詳細瞭解原始字符串,例如here。
方法sub
已從模塊re
導入。在你的代碼的頂部,你可能會發現這條線:
from re import sub # (or `from re import *`)
在我看來,最好是import re
和訪問sub
爲re.sub
後,這種方式是明確的。
sub
的第一個參數是一個正則表達式。正則表達式(正則表達式)是一個大問題,你可以找到很好的資源來理解它們here或here。這是什麼特定的正則表達式的作用:
[
和]
之間)\d
意味着數字,相同0-9
),和^
意味着否定(不).
指任何字符所謂的正則表達式引擎會尋找這一個字符模式的匹配,例如在abc123
它將有3個匹配:a
,b
和c
。 sub
的第二個參數告訴用什麼來替換這些匹配。在這裏,您告訴替換爲空(即空字符串,即兩個引號之間沒有任何內容:''
)。 sub
的第三個參數提供了您想要對其執行此操作的字符串。然後將結果傳遞給名爲Decimal
的方法或類,您可以在代碼中查找並找出它的作用。
不是答案的一部分,但一般建議如何更好地處理類似的案件:
如果您想了解這樣一個基本的代碼,你可以導入它的方法,並嘗試他們一個接一個,或者臨時添加print()
語句,重新加載模塊並調用方法。例如,讓我們假設你的模塊稱爲pricecalculator
,並在具有相同名稱或文件pricecalculator.py
一個目錄,然後你去到該目錄中,打開一個Python外殼,並鍵入:
import imp
import pricecalculator
from pricecalculator import *
然後你就可以調用此模塊的任何方法。假設你想知道什麼是變量group
,它的第三個元素是什麼?然後添加在您的文章中線上方線print('group: ', group)
或print('type of group: ', type(group))
,並重新加載模塊:
imp.reload(pricecalculator)
from pricecalculator import *
然後調用其中的代碼發生的方法,你會看到打印變量的內容。
此外,如果你看到一個方法,你想知道它做了什麼,試着找出它來自哪裏,哪個模塊,並查找方法的文檔。例如:
import re
# see the documentation:
help(re.sub) # press `q` to return to shell
from re import *
# find the module for a method:
sub.__module__
並嘗試直接在shell中試驗方法,閱讀文檔,嘗試一些東西並理解錯誤消息。 Here is a guide每種錯誤的含義。
最後,在這裏問一個問題之前,總是會想:有沒有機會讓答案幫助別人?試着制定相應的標題和問題。
子可能是從https://docs.python.org/3/library/re.html#re.sub導入的 –