【发布时间】:2016-01-08 08:41:05
【问题描述】:
我有一个制表符分隔的日志文件,其中包含如下行:
event_a info1 info2
event_b info1 info4
event_c info2 info5 ...
我想将其转换为 csv(使用 Python),其中列具有含义。 info1 例如是一个 ID,info2 是一个目的地,info4 是一个坐标等。
我可以很容易地以“草率”的方式做到这一点:
if "event_a" in line:
columns = line.split()
id = columns[1]
我希望为此使用查找矩阵或表结构之类的东西,以便将列的位置与编程逻辑分开。有什么东西可以让我在这里定义一个富有表现力的概述,这样我就可以编写如下代码:
for line in csvfile:
matches = event_table.match(line)
for match in matches:
event_table.convert(match)
# add commas in between the values to account for empty columns
我当然可以为每个事件创建一个类,但这似乎有点过头了。我正在寻找的是一个中心定义,我可以使用它。
输出是:
event_a, info1 info2
event_b, info1, , , info4
event_b, , info2, , , info5
...
event_365, , , , , , , , , , , , info12
编辑:日志文件包含 100 种此类事件类型,这会使此代码相当长且难以维护,以“瀑布”解析方式执行此操作
【问题讨论】:
-
为什么不把它全部拆分成一个列表呢?
-
如果你想走过度设计的路线,那么
pyparsing可能是你的一杯茶.. -
显示预期输出。
-
我编辑了这个问题。正如标题所暗示的那样,我不是在寻找一种快速的方法,而是在寻找一种尽可能将逻辑与代码分开的方法。例如。我可以将列定义交给其他人来处理。