我是Python的新手,它试图编写Python代码,该代码将从excel文件中提取一些数据,并使用提取的数据创建文本文件(用作C语言头文件)。 我可以解析excel并提取相关数据,但是在以所需格式将数据写入文本文件时需要一些指导。
从Excel提取的数据看起来像这样
parameter_name = "Colour"
parameter_value = ["0x01","0x02","0x06","0x10"]
parameter_value_desc = ["Black","White","Red","Indigo"]
提取的数据将以这种格式(创建枚举声明)写入文本文件
typedef enum Colour{Black = 0x01,
White = 0x02,
Red = 0x06,
Indigo = 0x10};
如何写文本文件,使枚举的每个元素都显示在另一个元素之下,如上所示?
我只能写入文件,以便枚举元素并排放置,如下所示。
typedef enum Colour{Black = 0x01, White = 0x02, Red = 0x06, Indigo = 0x10};
但这是一个问题,当我们有更多的枚举元素时,在这种情况下,文本将超过每行80个字符的限制。
这是我的代码的外观
def write_to_file(parameter_value, parameter_value_desc, parameter_name):
with open("out_file.h", "a") as f:
print("typedef enum {}".format(parameter_name) + "{", file=f, end="")
for value, desc in zip(parameter_value, parameter_value_desc):
print("{} = 0x{}".format(str(desc), str(value)), file=f, end=",")
print("};", file=f, end="\n")
答案 0 :(得分:1)
这看起来像是str.join
的任务。我将按照以下方式进行操作:
parameter_name = "Colour"
parameter_value = ["0x01","0x02","0x06","0x10"]
parameter_value_desc = ["Black","White","Red","Indigo"]
with open("out_file.h", "a") as f:
print("typedef enum {}".format(parameter_name) + "{", file=f, end="")
indent_size = len("typedef enum {}".format(parameter_name) + "{")
print((",\n" + " "*indent_size).join("{} = {}".format(str(desc), str(value)) for value, desc in zip(parameter_value, parameter_value_desc)), file=f, end="")
print("};", file=f, end="\n")
out_file.h
内容:
typedef enum Colour{Black = 0x01,
White = 0x02,
Red = 0x06,
Indigo = 0x10};
我计算了要对齐并与元素连接所需的空间,换行符需要的空间数量。
答案 1 :(得分:0)
这是Daweo's answer的一种变体,主要是试图使with
块的工作量减少:
start = f'typedef enum {parameter_name}{{'
sep = ',\n' + ' '*len(start)
values = (f'{d} = {v}' for v, d in zip(parameter_value, parameter_value_desc))
with open("out_file.h", "a") as f:
print(f'{start}{sep.join(values_fmtd)}}};', file=f)
答案 2 :(得分:-1)
伪代码:
for (i, value) in enumerate(values):
if i==0:
out = first_line
else:
out = " " * len(first_line)
out += value
if i == len(values) - 1:
out += last_line
else:
out += ",\n"
print(out)
其中first_line
是typedef enum Colour{