繁体   English   中英

如何使用格式规范迷你语言正确对齐和填充编号与最大宽度

[英]How to right align and pad number with max width using format specification mini language

我需要能够通过将格式规范传递给numpy.savetxt()中的fmt参数的方式来执行此操作。 我想要:

  1. 漂浮
  2. 用零填充
  3. 右对齐数字
  4. 截断为8位数字,保留小数点后3位(包括负号)

我尝试了这个:

'{:0>8}'.format('%.3f')

我将其传递给numpy.savetxt()函数,但无法将值截断为指定的8位数字宽度。

例如:

import numpy as np
arr = np.random.random(10,10)*10
np.savetxt("testfile.txt", arr, fmt='{:0>8}'.format('%.3f')), delimiter='')

给出输出:

0000-11.54900006.870000021.8620000-0.3420000-20.55700005.5390000-2.343000012.1160000-8.949000012.097
00002.1510000-8.29800004.4310000-6.1050000-4.2280000-11.462000019.7120000-10.29800006.848000013.074
0000-0.536000010.8160000-10.329000011.328000017.5580000-2.83200007.795000012.10400001.834000011.550
0000-2.6060000-10.25000008.5310000-6.839000010.7350000-15.7570000-0.274000011.17500000.9940000-7.971
000022.6050000-1.4860000-2.37000000.806000010.3560000-8.86100002.430000018.6110000-3.1820000-5.281
000022.0720000-7.299000018.0320000-2.556000010.4690000-1.21900006.23900006.3840000-8.1560000-10.781
0000-2.0590000-4.8680000-22.31700005.0220000-9.5820000-2.873000021.6050000-0.9110000-9.7050000-4.920
0000-8.4410000-4.061000023.6880000-2.7050000-0.5700000-3.4070000-10.48900005.1820000-2.32500000.581
000016.9450000-19.11100002.955000018.28900000.62500003.34200003.1910000-14.7660000-4.93600002.139
000016.1390000-1.58100002.095000032.02800006.63900002.07300006.3080000-12.91900001.42500001.447

显然,这些值没有被适当地截断,因为每行的长度应相同,而每列的宽度应基本固定。

如何修改传递给numpy的savetxt函数的fmt参数的格式说明符以获得所需的结果?

savetxt有机会查看它之前,立即对表达式'{:0>8}'.format('%.3f')求值。 这意味着savetxt它的角度来看只是字符串'0000%.3f' ,它不能满足您的要求。

在查看了有关格式规范的各种 文档之后,我认为使用fmt='%09.3f'应该会为您提供所需的结果。 要对此进行剖析:

  • 0表示其为零填充。
  • 9表示有9个字符(因为.需要一个额外的字符)。
  • .3表示有3个小数位。
  • 最后, f指定十进制表示法(与科学或其他种类的表示法相对)。

浮点数默认情况下会填充到右侧,因此无需担心。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM