数字の前にゼロを追加してください。

数字の前にゼロを追加してください。

Pythonとして計算された次のファイルがあります。

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

さて、次のようなものを手に入れたいです。

010000010  
000010000  
111000111  
000111000  

私の考えは、0を追加して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.1は次のようになります。111000111.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を返します。リテラル。

この命令は、入力を左側に0〜9桁の数字を付けた符号付き整数(10進数)として"%09d"扱います。q[%09d]09

注:必要に応じて、次のディレクティブもsprintfあります。#「ゼロ以外のバイナリプレフィックスとして「0b」または「0B」を使用してください。」#このディレクティブは、Pythonの出力形式を変更する場合に便利です(詳細はドキュメントを参照)。

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

関連情報