簡體   English   中英

從可變長度 python f-string 中提取參數

[英]Extract parameters from variable length python f-string

使用 Python 3.6

我在main中有一個 f 字符串,看起來像

title =f'Backup errors in {folder} on {host} at {datetime.datetime.today()}'

用於以下 function 調用send_mail(title, message, to, from)

我不允許更改 function 調用。

問題是,在send_email中,我可以從 f 字符串中提取folderhost變量嗎?

我通常會嘗試類似的東西:

extracted_folder = title.split()[17:30]

但是folderhost都是可變長度的。

您可以像這樣組合拆分和切片:

title = 'Backup errors in folder 1234 on host1234 at today1234'
folder = title[17:].split(' on ')[-2]
host = title[17:].split(' on ')[-1].split(' at ')[0]
print(folder)
print(host)

output:

folder 1234
host1234

如果您使用其他技巧,我還使用空格和文件夾名稱中的“on”:

title = 'Backup errors in folder on 1234 on host1234 at today1234'
folder = " on ".join(title[17:].split(' on ')[:-1])
host = title[17:].split(' on ')[-1].split(' at ')[0]
print(folder)
print(host)

output:

folder on 1234
host1234

您可以使用re模塊。 例如:

import re

# regular expression version of text for matching
retext = r'Backup errors in (?P<folder>\S+) on (?P<hostname>\S+) at'

# string containing information
text = 'Backup errors in myfolder on myhost at 17:23:45'

# get dictionary containing the parts of your text
info = re.match(retext, text).groupdict()

print(info)
{'folder': 'myfolder', 'hostname': 'myhost'}

如果文件夾和主機是單字(無空格):

>>> title = "Backup errors in /var/mail/filename.log on myserver.domain at ..."
>>> words = title.split(' ')
>>> words[3]
'/var/mail/filename.log'
>>> words[5]
'myserver.domain'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM