我正在使用Python(2.7)解析一个逗号分隔的文件,而我却无法用一种优雅的方式来表示字段名称。
这是一个示例文件:
first_field,field2,last_field
1,2,hello
4,5,goodbye
这是一种方法:
fields = ('first_field', 'field2', 'last_field')
report_lines = report.split('\n')
assert report_lines[0] == ','.join(fields)
for line in report_lines:
values = line.split(',')
some_function(values[fields.index('first_field')])
another_function(values[fields.index('last_field')])
实际报告有几十个字段,我经常拼错其中一个字段名称。上面的方法很好,因为如果我错误地键入字段名称,对index()的调用将会提高。我想让pylint抓住我的错别字,所以我想出了这个:
first_field = 'first_field'
field2 = 'field2'
last_field = 'last_field'
fields = (first_field, field2, last_field)
report_lines = report.split('\n')
assert report_lines[0] == ','.join(fields)
for line in report_lines:
values = line.split(',')
some_function(values[fields.index(first_field)])
another_function(values[fields.index(last_field)])
我更喜欢第二种方法,因为拼写错误的字段名称将在pylint-time而不是在运行时捕获。问题是在顶部(即第二种方法的前4行),我必须输入每个字段名称三次而不是一次。
此外,在这两种方法中,为每个字段访问键入fields.index(...)并不理想。
同样,实际报告有许多字段,并且解析它们的代码相当复杂(并且它对许多不同的字段进行了许多引用)。所以我正在寻找上述两种方法的优雅组合,或者我可能错过的另一种方法。我只需要一种声明字段然后访问它们的方法,这样拼写错误的字段名称就会在pylint时捕获而不是在运行时。
请注意,我查看了Python的csv模块,但没有看到任何可以解决这个特定问题的东西,但我当然可能错过了一些东西。