代码之家  ›  专栏  ›  技术社区  ›  Abhinav

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

  •  2
  • Abhinav  · 技术社区  · 7 年前

    我的脚本:-

    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\u db)

    GOCO公司

    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
    

    我希望输出为

    打印(操作系统环境['ORACLE\u SID'])

    GOCO公司

    2 回复  |  直到 7 年前
        1
  •  1
  •   acknowledge    7 年前

    另一种方法是搜索用户输入的名称,并用 : . 这样地:

    term_to_search = name_db + ':'
    if term_to_search in line:
        var1 = line
    
        2
  •  0
  •   Jonas Byström    7 年前

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