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
我在 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