我正在使用以下正则表达式从文件中提取多个信息。
{{1}}
以下是“inventory.log”文件的内容。
{{1}}
当我调用该函数时,它不会显示 final_sn 的结果。我尝试重新排序if语句,并且发现它仅适用于 if 和第一个 elif 语句。我错过了我的代码吗?
答案 0 :(得分:0)
如果您同时拥有PID
和SN
,那么您最终只会运行第一个elif
语句。
试试这个:
def inventory():
with open('inventory.log', 'r+') as f:
match_hostname = re.compile(r'NAME: "(.+)",')
match_pid = re.compile(r'PID: (.+) ,')
match_sn = re.compile(r'SN: (.+)')
list_text = [text.strip() for text in f]
for line in list_text:
match_regex_hostname = match_hostname.search(line)
match_regex_pid = match_pid.search(line)
match_regex_sn = match_sn.search(line)
if match_regex_hostname:
final_hostname = match_regex_hostname.group(1).strip(" ")
print final_hostname
if match_regex_pid:
final_pid = match_regex_pid.group(1).strip(" ")
print final_pid
if match_regex_sn:
final_sn = match_regex_sn.group(1).strip(" ")
print final_sn
inventory()
答案 1 :(得分:0)
看起来“inventory.log”是一个csv文件,这意味着你可以使用csv
模块来完美地完成这项任务。
def inventory(filename):
with open(filename) as f:
reader = csv.reader(f)
for row in reader:
print([item.strip()
for item in row if item.strip().lower().startswith(('name', 'pid', 'sn'))])
演示:
>>> import csv
>>> import io
>>> text = """NAME: "LAB-SW01", DESCR: "My Switch"
... PID: AS-2001-XT , VID: N/A, SN: ABA0923K0DN"""
>>> with io.StringIO(text) as f:
... reader = csv.reader(f)
... for row in reader:
... print([item.strip() for item in row if item.strip().lower().startswith(('name', 'pid', 'sn'))])
...
['NAME: "LAB-SW01"']
['PID: AS-2001-XT', 'SN: ABA0923K0DN']