Python 在 oratab 文件中搜索具有相似名称的字符串

Python search string with similar name in oratab file

我在 python 中编写了脚本,其中该脚本将从用户那里获取名称并在获得结果后搜索文件,它将被拆分并导出到 OS 环境变量。

问题是,在文件中搜索名称时,它们有两个名称,例如 GOCO 和 GOCO01,如果用户输入 GOCO 但结果输出或导出输出是 GOCO01,因为它在文件中排在第一位,如果用户 select GOCO 然后导出GOCO

我的脚本:-

name_db = input("Please enter a Database Name: ")
with open("/etc/oratab") as f:
    for line in f:
     if name_db in line:
      var1= line
   os.environ['ORACLE_SID']=var1.split(':')[0]
   os.environ['ORACLE_HOME']=var1.split(':')[1]

打印(name_db)

GOCO

打印 (os.environ['ORACLE_SID'])

GOCO01

ORATAB 文件内容:-

ATING001:/home/oracle/dbhome_1:Y
GOCO01:/home/oracle/dbhome_1:Y
GOCO:/home/oracle/dbhome_1:Y
SYM1:/home/oracle/dbhome_1:Y
SYM2:/home/oracle/dbhome_1:Y

我希望输出为

打印 (os.environ['ORACLE_SID'])

GOCO

听起来像是模糊匹配的案例?

#!/usr/bin/env python

import difflib
import os

name_db = input('Please enter a Database Name: ')
fuzzy_match = lambda line: difflib.SequenceMatcher(None, name_db.lower(), line.lower()).ratio()
best_line = max([line.strip() for line in open('/etc/oratab')], key=fuzzy_match)
os.environ['ORACLE_SID']=best_line.split(':')[0]
os.environ['ORACLE_HOME']=best_line.split(':')[1]

请注意 lower() 调用,因此此实现不区分大小写。

另一种方法是搜索用户输入的名称,并用 : 连接起来。像这样:

term_to_search = name_db + ':'
if term_to_search in line:
    var1 = line