我有一个需要解析的配置文本文件。看起来像这样:
FROM amazonlinux
COPY . /app
RUN yum -y update
RUN yum -y install python3
RUN yum -y install python3-pip
RUN yum install python-devel -y
RUN yum install gcc gcc-devel -y
RUN yum install libxml2 libxml2-devel -y
RUN yum install libxslt libxslt-devel -y
RUN yum install openssl openssl-devel -y
RUN yum install libffi libffi-devel -y
RUN pip3 install lxml
RUN pip3 install scrapy
RUN pip3 install -r /app/requirements.txt
WORKDIR /app
ENTRYPOINT ["python3", "/app/spiders/start.py"]
我想仅根据服务器池类型来构建列表, ['agateway','ac-edge','webnode']。 考虑只将开始于4个空格的行放入缓存,然后解析出冒号。 关于实现此目标的最佳Pythonic方式有何想法?
答案 0 :(得分:1)
您可以使用正则表达式来解析所需的数据:
import re
with open('file', 'r') as file_:
data = re.findall(r'\s+(.+):$', file_.read(), re.MULTILINE)
print data
答案 1 :(得分:0)
我不确定只读取以四个空格开头的行,但是一种方法可能是读取整个内容,然后只选择以冒号结尾的行,然后在走时取下冒号。这可能是更多的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']