在数字前面添加零

在数字前面添加零

我有一个如下所示的文件,是用 Python 计算的:

1.00000100e+07  
1.00000000e+04  
1.11000111e+08  
1.11000000e+05

现在,我想获得这样的东西:

010000010  
000010000  
111000111  
000111000  

我的想法是添加零以获得 9 位的固定格式。我编写的 Python 代码为我提供了二进制数,但为了进一步解码,我需要这些二进制数有 9 位。我尝试从 Python 中以所需的格式获取它们,但我无法做到这一点。

我希望我的解释很清楚。

更新:
Python代码:

#!/usr/bin/env python3  

import numpy as np  
from numpy import genfromtxt  
import os  

day = os.environ.get('day')  
Array = genfromtxt("SUC_diffzeros_"+str(day)+".csv")  
final = np.zeros(len(Array))
    
def decimaltobinary(x):

    for i in range(len(x)):
        
        print(x[i])
        final[i] = "{0:09b}".format(x[i])
        print(final)
    var = np.column_stack([Array, final])
    np.savetxt("SUC_diffzeros_"+str(day)+".csv", var, fmt='%.8e')

if __name__ == '__main__':
    val = Array.astype(int)
    decimaltobinary(val)

答案1

$ awk '{printf "%09.15g\n", $0}' < file
010000010
000010000
111000111
000111000

或者:

$ awk '{printf "%09d\n", $0}' < file
010000010
000010000
111000111
000111000

这也转换为整数。您会看到数字上的差异,例如1.1111000111.9前者会给出:

0000001.1
111000111.9

后者:

000000001
111000111

另请参阅awk '{printf "%09.0f\n", $0}'哪轮:

000000001
111000112

答案2

使用(以前称为 Perl_6)

~$ raku -ne 'put sprintf "%09d", $_;' file

或者

~$ raku -ne 'put sprintf q[%09d], $_;' file

输入示例:

1.00000100e+07  
1.00000000e+04  
1.11000111e+08  
1.11000000e+05

示例输出:

010000010
000010000
111000111
000111000

根据文档,“这个函数 ( sprintf) 与 C 库的 sprintf 和 printf 函数基本相同。这两个函数之间的唯一区别是 sprintf 返回一个字符串,而 printf 函数写入一个文件句柄。sprintf 返回一个 Str,而不是文字。”

该指令"%09d"q[%09d]将输入视为有符号整数(十进制),左侧填充0零到9九位数字。

注意:如有必要,sprintf还有#指令,其中(除其他外),'用“0b”或“0B”作为非零二进制前缀'。#如果您更改 Python 输出格式,此指令可能会很有用(有关详细信息,请参阅文档)。

https://docs.raku.org/routine/sprintf
https://raku.org

相关内容