用Python解析文件
我的输入文件大概是这样的
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
中获取值了。