我输出的文件是通过在某些位置填充值来输出的。 []括号内的任何名称都填充了实际值。但由于值的长度不同,格式很混乱,我该怎么做?
谢谢!
输入文件
type xga_control_type is record
[NAME] : std_logic; -- [OFFSET] : [DESCRIPTOIN]
end record xga_control_type;
Python代码
input=open("input.txt","r")
output=open("output.txt","w")
for line in input:
line=input.readlines()
if '[OFFSET]' in line:
line=line.replace('[OFFSET]',register[i]['offset'])
if '[NAME]' in line:
line=line.replace('[OFFSET]',register[i]['name'])
if '[DESCRIPTION]' in line:
line=line.replace('[DESCRIPTION]',register[i]['description'])
output.write(line)
当前输出
type xga_control_type is record
reserved : std_logic; -- 31..27 :
force_all_fault_clear : std_logic; -- 26 : Rising edge forces all fault registers to clear
force_warning : std_logic; -- 25 : Forces AC2 to report a Master Warning
force_error : std_logic; -- 24 : Forces AC2 to report a Master Error
reserved : std_logic; -- 23..22 :
ref_delay_cnt : std_logic; -- 21..20 : Number of reference commands to delay output by. Counts in 4us increments
end record xga_control_type;
期望的输出
type xga_control_type is record
reserved : std_logic; -- 31..27 :
force_all_fault_clear : std_logic; -- 26 : Rising edge forces all fault registers to clear
force_warning : std_logic; -- 25 : Forces AC2 to report a Master Warning
force_error : std_logic; -- 24 : Forces AC2 to report a Master Error
reserved : std_logic; -- 23..22 :
ref_delay_cnt : std_logic; -- 21..20 : Number of reference commands to delay output by. Counts in 4us increments
end record xga_control_type;
答案 0 :(得分:3)
Python中有两种字符串格式选项:%
运算符和(首选).format()
方法。
这些将允许您格式化文本,考虑数字精度,数字和字符串填充和对齐(这是您似乎需要的)。
查看以下文档:
https://docs.python.org/2/library/string.html(Python 2)
https://docs.python.org/3/library/string.html(Python 3)
这些文档中的这些示例是相关的:
>>> '{:<30}'.format('left aligned')
'left aligned '
>>> '{:>30}'.format('right aligned')
' right aligned'
>>> '{:^30}'.format('centered')
' centered '
>>> '{:*^30}'.format('centered') # use '*' as a fill char
'***********centered***********'
答案 1 :(得分:0)
你可以填充到一定的宽度:
input=open("input.txt","r")
output=open("output.txt","w")
for line in input:
line=input.readlines()
if '[OFFSET]' in line:
line=line.replace('[OFFSET]',register[i]['offset'] + (' ' * (30 - len(register[i]['offset']))))
if '[NAME]' in line:
line=line.replace('[OFFSET]',register[i]['name'] + (' ' * (40 - len(register[i]['name'])))
if '[DESCRIPTION]' in line:
line=line.replace('[DESCRIPTION]',register[i]['description'])
output.write(line)
但是,不要填写最后一节。
您可以根据需要随意编辑数字。
答案 2 :(得分:0)
您应该使用.format()语法,如下所示:
line=line.replace('[OFFSET]', '{0:<40}'.format(register[i]['offset']))
答案 3 :(得分:0)
听起来您希望每列的字符数相同(例如20个字符),因此您需要用空格填充字符串,使其总共为20个字符。字符串的ljust函数可以执行此操作:
"hello".ljust(20,' ')
>>>'hello '
应用于您的代码,您可以执行以下操作:
line=line.replace('[OFFSET]',register[i]['offset'].ljust(20,' '))