用Python解析文件

2 投票
2 回答
2287 浏览
提问于 2025-04-15 22:29

我的输入文件大概是这样的

key "value"
key "value"
... the above lines repeat

我做的事情是读取文件内容,把数据放到一个对象里,然后返回这个对象。文件里只会有一些特定的键可以出现。因为我刚开始学python,所以我觉得我读取文件的代码写得不太好。

我的代码大概是这样的

ObjInstance = CustomClass()
fields = ['key1', 'key2', 'key3']

    for field in fields:
        for line in f:
            if line.find(field) >= 0:
                if pgn_field == 'key1':
                    objInstance.DataOne = get_value_using_re(line)
                elif pgn_field == 'key2':
                    objInstance.DataTwo = get_value_using_re(line)

return objInstance;

这个叫“get_value_using_re”的函数非常简单,它会在双引号之间查找字符串并返回它。

我担心我会写很多个if和elif语句,我不知道这样做是不是对的。

我这样做是对的吗?

2 个回答

2

我建议你看看Python的YAML解析器。它可以方便地读取一个和这个很相似的文件,并把内容放进一个Python字典里。使用YAML解析器:

import yaml
map = yaml.load(file(filename))

然后你就可以像使用普通字典一样,通过map[key]来获取对应的值。YAML文件的格式大概是这样的:

key1: 'value'
key2: 'value'

不过要注意,所有的键(key)必须是唯一的,也就是说不能有重复的键。

4

在Python中,通常的做法是这样的:

for line in f:
    mo = re.match(r'^(\S+)\s+"(.*?)"\s*$',line)
    if not mo: continue
    key, value = mo.groups()
    setattr(objInstance, key, value)

如果你用的key不是正确的属性名称,那么在最后一行,你可以把key换成类似translate.get(key, 'other')的写法,这样就能从一个合适的字典translate中获取值了。

撰写回答