Text-Processing

在數字前面添加零

  • April 8, 2022

我有一個看起來像這樣的文件,是用 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)
$ awk '{printf "%09.15g\n", $0}' < file
010000010
000010000
111000111
000111000

或者:

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

這也轉換為整數。1.1您會看到數字上的差異,例如111000111.9前者會給出:

0000001.1
111000111.9

而後者:

000000001
111000111

另請參閱awk '{printf "%09.0f\n", $0}'哪些回合:

000000001
111000112

使用Raku(以前稱為 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(字面意思。”

指令"%09d"q[%09d]將輸入視為有符號整數(十進制),左填充0零到9九位。

注意事項:如有必要,sprintf還具有#指令,其中(除其他外),‘前綴(es)非零二進制與“0b”或“0B”’。#如果您更改 Python 輸出格式,此指令可能很有用(有關詳細資訊,請參閱文件)。

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

https://raku.org

引用自:https://unix.stackexchange.com/questions/698322