[英]parse statement string for arguments using regex in Python
我有要解析的用戶輸入語句。 如果可能,使用正則表達式。
我在Stackoverflow上閱讀了很多有關functools.partial的內容,在其中找不到參數解析。 同樣在Stackoverflow的正則表達式中,我找不到如何檢查匹配項,但排除了使用的令牌。 Python標記器似乎很重。
import re
def getarguments(statement):
prog = re.compile("([(].*[)])")
result = prog.search(statement)
m = result.group()
# m = '(interval=1, percpu=True)'
# or m = "('/')"
# strip the parentheses, ugly but it works
return statement[result.start()+1:result.end()-1]
stm = 'psutil.cpu_percent(interval=1, percpu=True)'
arg_list = getarguments(stm)
print(arg_list) # returns : interval=1, percpu=True
# But combining single and double quotes like
stm = "psutil.disk_usage('/').percent"
arg_list = getarguments(stm) # in debug value is "'/'"
print(arg_list) # when printed value is : '/'
callfunction = psutil.disk_usage
args = []
args.append(arg_list)
# args.append('/')
funct1 = functools.partial(callfunction, *args)
perc = funct1().percent
print(perc)
這將導致錯誤:Builtins.FileNotFoundError:[Errno 2]沒有這樣的文件或目錄:“'/'”
但
callfunction = psutil.disk_usage
args = []
#args.append(arg_list)
args.append('/')
funct1 = functools.partial(callfunction, *args)
perc = funct1().percent
print(perc)
確實返回(對我來說)20.3這是正確的。 所以有一些區別。
奇怪的是,如果我在IDE(WingIDE)中查看內容,則結果為“ /”,然后,如果我要查看詳細信息,則結果為“ /”
我使用的是Python 3.4.0,這是怎么回事,如何解決? 非常感謝您的幫助。
getarguments("psutil.disk_usage('/').percent")
返回'/'
。 例如,您可以通過打印len(arg_list)
進行檢查。
您的IDE會添加"
,因為默認情況下字符串被括在單引號'
。現在您有了一個實際上包含'
的字符串,因此IDE使用雙引號將其括起來。
注意, '/'
不等於"'/'"
。 前者是1個字符的字符串,后者是3個字符的字符串。 因此,為了正確處理,您需要在getarguments
中getarguments
引號(雙引號和單引號)。 您可以按照以下代碼段進行操作
if (s.startswith('\'') and s.endswith('\'')) or
(s.startswith('\"') and s.endswith('\"')):
s = s[1:-1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.