当文本从第 n 个位置开始时,如何仅读取文本文件中的行



我有一个需要解析的配置文本文件。看起来像这样:

    agateway:
       cl_profile: "sl6.5-x86_64"
       prefix: "aicgateway"
       primary_role: "STANDARDV3"
       requires_pool: false
    ac-edge:
       cl_profile: "sl6.5-x86_64"
       prefix: "ac-edge"
       primary_role: "STANDARDV3"
       requires_pool: false
    webnode:
       cl_profile: "centos-5.6-x86_64-db-v2"
       vlans: ["frontend"]
       label: "Frontend"
       prefix: "web"
       primary_role: "FRONTEND"
       requires_pool: false

我想仅从服务器池类型构建一个列表,['agateway', 'ac-edge', 'webnode']。思考只是将仅从 4 个空格开始的行放入缓存中,然后解析出冒号。关于实现这一目标的最佳 Python 方式的任何想法?

您可以使用正则表达式来解析所需的数据:

import re
with open('file', 'r') as file_:
    data = re.findall(r's+(.+):$', file_.read(), re.MULTILINE)
print data

我不确定只阅读以四个空格开头的行,但一种方法可能是阅读整个内容,然后只选择以冒号结尾的行,在你去的时候去掉冒号。这可能是更多的Python 3语法,因为这是我习惯的,但无论哪种方式,列表理解都应该几乎相同:

data = []
with open('my_file', 'r') as a_file:
    for line in a_file:
        data.append(line.strip())  # all lines, minus white space
data = [d[:-1] for d in data if d[-1] == ':']
print(data)
# ['agateway', 'ac-edge', 'webnode']

所以基本上,将你的文件逐行读入一个列表,然后使用列表理解来只抓取你关心的内容。您可以通过仅将以冒号结尾的行附加到列表中来完成类似的事情:

data = []
with open('my_file', 'r') as a_file:
    for line in a_file:
        if line.strip()[-1] == ':':
            data.append(line.strip())
print(data)
# ['agateway', 'ac-edge', 'webnode']

最新更新