선없이 바이너리 파일을 통해 반복. 데이터는 22 바이트의 청크로 분리되어 있으므로 22 개의 값을 포함하는 튜플 목록을 생성하려고합니다. 파일은 줄로 분리되어 있지 않으므로 파일을 반복하고 데이터를 가져 오는 방법을 찾는 데 문제가 있습니다. 내가 이렇게하면파이썬 내가 구문 분석 할 필요가 이진 파일의 일부 데이터를 가지고
그것은 잘 작동 : newList (22 개) 값의 튜플을 포함
nextList = f.read(22)
newList = struct.unpack("BBBBBBBBBBBBBBBBBBBBBB", nextList)
합니다. 그러나 반복되는 함수에 유사한 논리를 적용하려고하면 오류가 발생합니다. 내가 잘못 여기거야 어디 그래서 너무 확실하지 않다
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
data = getAllData()
File "<pyshell#26>", line 5, in getAllData
listOfAll.append(struct.unpack("BBBBBBBBBBBBBBBBBBBBBB", nextList))
struct.error: unpack requires a bytes object of length 22
내가 파이썬에 비교적 새로운 해요 :
def getAllData():
listOfAll = []
nextList = f.read(22)
while nextList != "":
listOfAll.append(struct.unpack("BBBBBBBBBBBBBBBBBBBBBB", nextList))
nextList = f.read(22)
return listOfAll
data = getAllData()
날이 오류를 제공합니다. 파일의 데이터가 22 바이트 섹션으로 균등하게 분할된다는 것을 알고 있으므로 문제는 아닙니다. 당신이 때 len(nextList) == 0
가 실행 된 것으로보고 있기 때문에
사람들은 "확실히"많은 것을 알고 있습니다. :-) 왜'인쇄 (LEN (nextList)에 repr (nextList))'은'append' 라인 전에 단지의 경우를 추가하지? 또 다른 가능성은 실패한 비교입니다 :'read'가'bytes' 객체를 반환하지 않습니까? 당신은'b "==" "'확실합니까? – DSM
나는 당신이 제안한 첫 번째 일을했고, 내가 생각한 것처럼 균등하게 무너지면서 어떤 이유로 len (nextList) = 0 일 때 끝에 다시 실행 중이므로 while 문이 시작될 때 if 문을 추가했습니다. len (nextList)! = 22 인 경우 루프가 중단되고 의도 한대로 정확하게 작동합니다. 덕분에 내가 할에 대한 :) – lunadiviner
을 나는'struct.unpack ("22B", nextList)를 사용하여'대신 22 명 조식을 입력하시기 바랍니다 바보 같은 실수 톤. – eryksun