2017-08-14 65 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