정수로 바이트 목록이 있습니다.
[120, 3, 255, 0, 100]
이 목록을 바이너리로 파일에 어떻게 쓸 수 있습니까?
작동할까요?
newFileBytes = [123, 3, 255, 0, 100]
# make file
newFile = open("filename.txt", "wb")
# write to file
newFile.write(newFileBytes)
답변
이 정확히 무엇을 bytearray
위한 것입니다 :
newFileByteArray = bytearray(newFileBytes)
newFile.write(newFileByteArray)
Python 3.x를 사용 bytes
하는 경우 대신 사용할 수 있습니다 (의도를 더 잘 알릴 수 있으므로 그래야합니다). 그러나 파이썬 2.x에서, 즉하지 않습니다 작품은, 때문에이 bytes
단지의 별칭입니다 str
. 평소와 같이 인터랙티브 인터프리터로 보여주는 것이 텍스트로 설명하는 것보다 쉽기 때문에 그렇게하겠습니다.
Python 3.x :
>>> bytearray(newFileBytes)
bytearray(b'{\x03\xff\x00d')
>>> bytes(newFileBytes)
b'{\x03\xff\x00d'
Python 2.x :
>>> bytearray(newFileBytes)
bytearray(b'{\x03\xff\x00d')
>>> bytes(newFileBytes)
'[123, 3, 255, 0, 100]'
답변
사용 struct.pack
후 바이트 쓰기, 이진 바이트로 정수 값을 변환 할 수 있습니다. 예
newFile.write(struct.pack('5B', *newFileBytes))
그러나 바이너리 파일에 .txt
확장자를 주지 않을 것 입니다.
이 방법의 장점은 다른 유형에서도 작동한다는 것입니다. 예를 들어 값이 255보다 큰 경우 '5i'
전체 32 비트 정수를 가져 오는 대신 형식에 사용할 수 있습니다 .
답변
256 미만의 정수에서 이진수로 변환하려면 chr
함수를 사용하십시오 . 그래서 당신은 다음을보고 있습니다.
newFileBytes=[123,3,255,0,100]
newfile=open(path,'wb')
newfile.write((''.join(chr(i) for i in newFileBytes)).encode('charmap'))
답변
Python 3.2 이상에서는 to_bytes
기본 int 메서드를 사용하여이 작업을 수행 할 수도 있습니다 .
newFileBytes = [123, 3, 255, 0, 100]
# make file
newFile = open("filename.txt", "wb")
# write to file
for byte in newFileBytes:
newFile.write(byte.to_bytes(1, byteorder='big'))
즉, to_bytes
이 경우에 대한 각 단일 호출 은 정수 값을 나타내는 빅 엔디안 순서 (길이 1 문자열의 경우 사소함)로 배열 된 문자를 사용하여 길이 1의 문자열을 생성합니다 byte
. 마지막 두 줄을 단일 줄로 줄일 수도 있습니다.
newFile.write(''.join([byte.to_bytes(1, byteorder='big') for byte in newFileBytes]))
답변
Python 3 구문을 사용하여 다음 코드 예제를 사용할 수 있습니다.
from struct import pack
with open("foo.bin", "wb") as file:
file.write(pack("<IIIII", *bytearray([120, 3, 255, 0, 100])))
다음은 쉘 한 줄짜리입니다.
python -c $'from struct import pack\nwith open("foo.bin", "wb") as file: file.write(pack("<IIIII", *bytearray([120, 3, 255, 0, 100])))'
답변
다음과 같이 pickle을 사용하십시오. import pickle
코드는 다음과 같습니다.
import pickle
mybytes = [120, 3, 255, 0, 100]
with open("bytesfile", "wb") as mypicklefile:
pickle.dump(mybytes, mypicklefile)
데이터를 다시 읽으려면 pickle.load 메소드를 사용하십시오.