.lrf 파일에서 일부 메타 데이터의 길이를 읽으려고합니다. (LoLReplay 프로그램과 함께 사용)파일에서 바이트를 읽는 방법
이 파일에는 실제로 설명서가 없지만 이미 C++에서이를 수행하는 방법을 알아 냈습니다. 여러 이유로 파이썬에서 프로젝트를 다시 작성하려고하지만 오류가 발생했습니다.
먼저 설명하기 위해, .lrf 파일은 다음 형식으로 파일의 시작 부분에 즉시 메타 데이터가 :
처음 4 바이트 나에 대한 단서가 없다 무엇인가에 대한 것입니다.
다음 4 바이트는 메타 데이터의 끝까지 16 진수로 메타 데이터의 길이를 저장합니다. 메타 데이터의 끝 부분은 재생 후 실제 내용입니다. 최초의 8 바이트 후
바이트 JSON 형식
실제로 메타 데이터 길이를 읽는 데 문제의 메타 데이터입니다. 문자를 읽기 위해 노력하고있다
Traceback (most recent call last):
File "C:\Users\Donald\python\lolcogs\lolcogs_main.py", line 6, in <module>
lolcogs.getMetaLength()
File "C:\Users\Donald\python\lolcogs\LoLCogs.py", line 20, in getMetaLength
file.read(4)
File "C:\Python32\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 3648: character maps to <undefined>
내 추측은 그 읽기 (입니다) :이 함수를 호출 할 때
def getMetaLength(self):
try:
file = open(self.file,"r")
except IOError:
print ("Failed to open file.")
file.close()
#We need to skip the first 4 bytes.
file.read(4)
mdlength = file.read(4)
print(hex(mdlength))
file.close()
는, 쉘이 내용의 역 추적을 반환 : 이것은 내가 가지고있는 현재의 기능입니다 어떤 유니 코드 형식으로 인코딩되었지만, 이것들은 확실히 내가 읽으려고하는 바이트들입니다. 바이트로 읽는 방법이 있습니까? 또한 파일을 읽으려고 할 때 바이트를 건너 뛰는 더 좋은 방법이 있습니까?
파일을 _binary mode_ :'f = open (self.file, "rb")'에서 열어보십시오. 또한'file' 형식의 이름과 충돌하기 때문에 이름을'file'로 지정하지 마십시오. –
@PauloBu 더 이상 그런 유형이없는 것처럼 보이지만 ... –
Python2.7에서 정의됩니다. 파이썬 3에서는. 하지만 OP의 코드를 읽고 그는 아마도 Python 3을 사용하므로 내 코멘트를 무시합니다. –