숫자 앞에 0을 추가하세요.

숫자 앞에 0을 추가하세요.

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도 있습니다 .#'0이 아닌 바이너리 접두사로 "0b" 또는 "0B"를 사용하세요.'#이 지시문은 Python 출력 형식을 변경하는 경우 유용할 수 있습니다(자세한 내용은 설명서 참조).

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

관련 정보