2017-08-14 64 views
1

我已经在python中编写了脚本,其中此脚本将从用户获取名称,并在获取结果后搜索文件,并将其导出到OS环境变量。oratab文件中具有相似名称的Python搜索字符串

问题是,当在一个文件中搜索名称时,它们是两个名称,分别是GOCO和GOCO01,如果用户输入GOCO但结果输出或输出是GOCO01,因为它首先出现在文件列表中,如果用户选择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

回答

0

听起来像模糊匹配的情况吗?

#!/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()调用,因此该实现不区分大小写。

+1

感谢它的工作,像黄油般光滑。 – Abhinav

0

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

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