我正在尝试读取.lrf文件中一些元数据的长度。(与LoLReplay程序一起使用)
这些文件没有真正的文档,但我已经在C++中找到了如何做到这一点。我正在尝试用Python重新编写项目,出于多种原因,但我遇到了一个错误。
首先解释一下,.lrf文件在文件开头就有元数据,格式如下:
- 前4个字节是我不知道的东西。 - 接下来的4个字节以十六进制形式存储元数据的长度,直到元数据结束为止,在此之后是重播的实际内容。 - 初始8个字节之后的字节是json格式的元数据
我遇到的问题实际上是读取元数据长度。这是我目前拥有的函数:
当我调用此函数时,命令行会返回一条回溯信息,指出:
这些文件没有真正的文档,但我已经在C++中找到了如何做到这一点。我正在尝试用Python重新编写项目,出于多种原因,但我遇到了一个错误。
首先解释一下,.lrf文件在文件开头就有元数据,格式如下:
- 前4个字节是我不知道的东西。 - 接下来的4个字节以十六进制形式存储元数据的长度,直到元数据结束为止,在此之后是重播的实际内容。 - 初始8个字节之后的字节是json格式的元数据
我遇到的问题实际上是读取元数据长度。这是我目前拥有的函数:
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()
当我调用此函数时,命令行会返回一条回溯信息,指出:
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>
我最好的猜测是read()试图读取以某种Unicode格式编码的字符,但这些明确只是我尝试读取的字节。有没有一种方法可以将它们作为字节读取?此外,在尝试读取文件时,是否有更好的跳过字节的方法?
f = open(self.file,"rb")
。此外,不要将其命名为file
,因为它会与内置的file
类型名称冲突。 - Paulo Bu