Skip to main content
 首页 » 编程设计

python之如何保持 (+/-) 数字的分隔符空间大小

2025年05月04日26dyllove98

我需要制作一个由 8 列用空格分隔的小模板,如下所示:

预期输出:

3139  3142  3144  3147     1      169.13   0  2000 
3144  3147  3165  3167     1      049.2    0  2000 
3142  3144  3147  3149     1      065.02   0  2000 
3142  3144  3147  3165     1     -168.52   0  2000 
3144  3147  3149  3150     1     -172.09   0  2000  
3144  3147  3165  3161     1      171.15   0  2000 

但是由于第 6 列中存在负值,我得到了不相等的空白,如下所示:

实际输出:

3139  3142  3144  3147     1      169.13   0  2000 
3144  3147  3165  3167     1      049.20   0  2000 
3142  3144  3147  3149     1      065.02   0  2000 
3142  3144  3147  3165     1      -168.52   0  2000 
3144  3147  3149  3150     1      -172.09   0  2000 
3144  3147  3165  3161     1      171.15   0  2000 

所以我的目标是根据我在预期输出中提到的第 6 列中的 +/- 值数字修剪空白。

这是我的代码:

from string import Template 
import sys 
 
fw=open("sample.txt","w") 
 
DIHRES = ['3139;3142;3144;3147;169.13', '3144;3147;3165;3167;49.20', '3142;3144;3147;3149;65.02', 
    '3142;3144;3147;3165;-168.52', '3144;3147;3149;3150;-172.09', '3144;3147;3165;3161;171.15'] 
 
for i in DIHRES: 
A1 = (i.split(";")[0]).strip() 
A2 = (i.split(";")[1]).strip() 
A3 = (i.split(";")[2]).strip() 
A4 = (i.split(";")[3]).strip() 
ANG = (i.split(";")[4]).strip() 
str = ''' 
$A1  $A2  $A3  $A4     1      $ANG   0  2000 
        ''' 
s = Template(str.strip() + "\n") 
fw.write(s.substitute(A1=A1, A2=A2, A3=A3, A4=A4, ANG=ANG.rjust(6, '0'))) 

提前致谢

请您参考如下方法:

一个更简单的解决方案是使用format。将最后一项转换为 float 并使用 float 格式(7 个宽度,小数点后 2 位)。 0 表示前导零,冒号后的空格表示为正数和 - 为负数放置一个空格:

DIHRES = ['3139;3142;3144;3147;169.13', 
          '3144;3147;3165;3167;49.20', 
          '3142;3144;3147;3149;65.02', 
          '3142;3144;3147;3165;-168.52', 
          '3144;3147;3149;3150;-172.09', 
          '3144;3147;3165;3161;171.15'] 
 
for item in DIHRES: 
    data = item.split(';') 
    data[-1] = float(data[-1]) 
    print('{}  {}  {}  {}     1      {: 07.2f}   0  2000'.format(*data)) 
3139  3142  3144  3147     1       169.13   0  2000 
3144  3147  3165  3167     1       049.20   0  2000 
3142  3144  3147  3149     1       065.02   0  2000 
3142  3144  3147  3165     1      -168.52   0  2000 
3144  3147  3149  3150     1      -172.09   0  2000 
3144  3147  3165  3161     1       171.15   0  2000