python - python 中用于生成报告的简单解释器

标签 python interpreter

我想处理带有标题的制表符分隔的输入数据文件,并根据模板生成制表符分隔的输出文件。

这是一个小设置:

数据文件:

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 编写解释器?解释器会解析模板文件,然后根据解析后的模板文件使用输入数据生成输出数据。

最佳答案

更新了变量 data.txt 长度

也许您应该使用 exec 进行调查。 这将允许您在模板中包含实际的 Python 代码。

数据.txt:

A B C D
1 4 7 2
2 5 8 5
3 6 9 8

模板.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 将生成:

输出.txt:

A BC HC 3/D
1 11 3.5 1.5
2 13 4.0 0.6
3 15 4.5 0.38

关于python - python 中用于生成报告的简单解释器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25484584/

相关文章:

java - Java 中 .class 文件的用途

scala - 让 Scala 解释器在解释调用之间忘记

python - 如何在Ubuntu上通过crontab运行py脚本?

python - 在网格中递归收集硬币

python - 使用python删除文件夹中的文件

python - 在保留所有维度的同时减去两个数组

python - 你如何在 Python 中递增文件名

java - 关于 JIT 编译器和解释器的说明

haskell - 如何在 Parsec 中手动操作特殊表达式的优先级?

c - Brainfuck 解释器在 c 打印中遇到麻烦