Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 当文本从第n个位置开始时,如何仅读取文本文件中的行_Python 2.7 - Fatal编程技术网

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

Python 2.7 当文本从第n个位置开始时,如何仅读取文本文件中的行,python-2.7,Python 2.7,我有一个需要解析的配置文本文件。看起来像这样: 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_r

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

    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 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']

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

import re

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

配置文件的格式是什么?每个服务器池的属性是静态的还是一致的?PyNoob,它是一个yaml文件。但对于解析,我认为可以将其作为一个文本文件。谢谢Engineero,但cince的每一行都以冒号结尾,这给了我比我需要的多得多的信息。试图利用我需要的行缩进较少这一事实。@ArinEkandem这在您给出的示例中效果很好,其中只有您所关心的行以冒号结尾。如果不是这样,我建议举一个更具代表性的例子。