【问题标题】:How to extract strings from /etc/oratab file?如何从 /etc/oratab 文件中提取字符串?
【发布时间】:2020-01-09 02:43:24
【问题描述】:

我正在尝试将数据库名称从一个名为 /etc/oratab 的文件中分离出来:

#Commends
DBNAME1:/opt/oracle/product/19000/db:N
DBNAME2:/opt/oracle/product/19000/db:N

以下代码仅返回 DBNAME1:

def oratab():
    dblist=[]
    flag=False
    with open('/etc/oratab', 'r') as oratab:
        for line in oratab:
           if line and line[0].isalpha():
              flag=True
           if flag:
              dblist.append(line)
    return ''.join(dblist).split(':')[0]

如何更改脚本以获得完整的 DBName 列表?

【问题讨论】:

  • 必须先调试一下,看看db名称列表是否在'oratab'中
  • 我只是好奇 flag=True 和 if flag: 部分代码的用途 :-) 它可能会导致考虑第一个正确行之后的所有行的错误,对吗?
  • 我可以推荐你在第一个 if 条件中添加一个not flag 条件,以便在你已经设置了标志之后进行快捷方式? if not flag and line and line[0].isalpha():

标签: python list extract


【解决方案1】:

您的dblistlines 的列表,并且您希望从split 行返回第一个元素而不是dblist

','.join(dbline.split(':')[0] for bdline in dblist)

如果是这样,我认为您需要在列表中返回 database nameslist 删除 join 并返回 return dblist

更好:

def oratab():
    dblist=[]
    with open('/etc/oratab', 'r') as oratab:
        for line in oratab:
           if line and line[0].isalpha():
              dblist.append(line.split(':')[0])
    return ','.join(dblist)

或者更短

def oratab():
    dblist = []
    with open('/etc/oratab', 'r') as oratab:
        dblist = [line.split(':')[0] in oratab if line and line[0].isalpha()]
    return ','.join(dblist)

【讨论】:

  • 我知道在问题中他做了''.join() 部分,但我认为他不需要那个,我认为这是他尝试获取所有数据库的一部分。
  • 是的,你是对的,或者只是删除 continue 并执行 append 谢谢
  • (您的第一个代码 sn-p 中缺少 ":" 上的引号。)我知道第一次回答时有时会出现这些故障 :^)
猜你喜欢
  • 2016-11-05
  • 2012-03-03
  • 2013-01-10
  • 2014-05-20
  • 2011-01-01
  • 1970-01-01
  • 2012-06-24
  • 2021-09-06
相关资源
最近更新 更多