如何在解析文件时仅获取文件中的值?

时间:2011-12-20 09:04:50

标签: python

我正在解析配置文件我想只得到文件中文件路径的值

例如配置文件有

apache.access =  /var/log/apache2/access.log
apache.errors = /var/log/apache2/errors.log

我想从

获取'/var/log/apache2/access.log'和'/var/log/apache2/errors.log'
COMMENT_CHAR = '#'
OPTION_CHAR =  '='



def parse_config(filename):
    options = {}
    f = open(filename)
    for line in f:
        if COMMENT_CHAR in line:
           line, comment = line.split(COMMENT_CHAR, 1)
        if OPTION_CHAR in line:
            option, value = line.split(OPTION_CHAR, 1)
            option = option.strip()
            value = value.strip()
            options[option] = value
    f.close()
    return options 

我尝试了这个,但它提供了文件中的所有选项和值

apache.access:/var/log/apache2/access.log

apache.errors:/var/log/apache2/errors.log

2 个答案:

答案 0 :(得分:3)

首先,您必须定义什么是文件路径(1.它是否必须存在?2。它是否必须在现有目录中创建?3。还有其他什么?)。这将测试给定字符串是否是指向现有目录/文件的路径:

import os

# ...

[v for v in options.itervalues() if os.path.exists(v)]

答案 1 :(得分:2)

正则表达式是您所需要的。这是一个很好的例子,它看起来如何

import re

f = open("apache.log")
for line in f:
    m = re.match("apache\.(access|errors)\s+=\s+(.+)", line)
    if None != m:
        print (m.group(2))
f.close()