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