如何在python中格式化输出数据

时间:2015-11-04 20:59:38

标签: python file-io

我输出的文件是通过在某些位置填充值来输出的。 []括号内的任何名称都填充了实际值。但由于值的长度不同,格式很混乱,我该怎么做?

谢谢!

输入文件

 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;

4 个答案:

答案 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,' '))