我想使用标题处理制表符分隔的输入数据文件,并根据模板生成制表符分隔的输出文件。
这是一个小设置:
数据文件:
A B C
1 4 7
2 5 8
3 6 9
定义输出中列的模板文件:
A:A
BC:B+C
HC:C/2, precision:2
模板文件包含以下操作:创建新列,对列进行求和和除法运算,以及定义列中有理数的精度。
输出文件:
A BC HC
1 11 3.50
2 13 4.00
3 15 4.50
我在哪里可以开始在python中编写解释器?解释器将解析模板文件,然后根据此解析的模板文件使用输入数据生成输出数据。
答案 0 :(得分:2)
更新了变量data.txt长度
也许你应该调查使用exec。 这个wold允许你在模板中包含实际的python代码。
<强> data.txt中:强>
A B C D
1 4 7 2
2 5 8 5
3 6 9 8
<强> template.txt:强>
headers = ['A', 'BC', 'HC', '3/D']
process = [ lambda params: int(params[0]),
lambda params: int(params[1]+params[2]),
lambda params: float('%.2f' % (params[2]/2)),
lambda params: float('%.2f' % (3. / params[3]))]
<强> report_gen.py:强>
with open ("data.txt", "r") as myData:
data = myData.readlines()
with open ("template.txt", "r") as myTemplate:
template = myTemplate.read()
file = open("output.txt", "w")
exec(template)
for line in data:
params = line.split(' ')
if (params[0].isdigit()):
for i in range(len(params)):
params[i] = float(params[i])
results = [None] * len(headers) #headers from eval'd template
for i in range(len(headers)):
# this is where we call our lambdas
# which will calculate the colums based on the data for this row
results[i] = str(process[i](params))
file.write(" ".join(results) + "\n");
else:
file.write(" ".join(headers) + "\n")
file.close()
现在,包含data.txt和template.txt的目录中的python report_get.py将生成:
<强> output.txt的:强>
A BC HC 3/D
1 11 3.5 1.5
2 13 4.0 0.6
3 15 4.5 0.38