处理二进制压缩数据的单个文件、纯python包
rawutil的Python项目详细描述
rawutil
==
一个处理二进制压缩数据的单文件纯python模块
结构
-对于打字机和打字机对象
<1-string结构
----
rawutil可以像struct一样使用,结构存储为string。rawutil几乎与struct完全兼容。如果在程序中,可以用"rawutil"替换"struct"的所有实例,则其工作方式应完全相同(有关问题,请参见下文)。
pack(stct,*data)->;bytes
将元素打包到一个bytes对象中,如structure sp所述由stct参数指定stct参数中的结构,并以列表形式返回元素
数据也可以是类似文件的对象。在这种情况下,解包将从文件的开头开始(它执行file.seek(0))
refdata选项是一个元组,它包含外部引用使用的数据,请参见下文。
请注意,与它的等效结构不同,如果数据长度不是匹配结构长度。
unpack_from(stct,data,offset=0,refdata=,getptr=false)
根据stct参数的说明从指定的偏移量解压缩数据,并返回元素作为列表
数据也可以是类似文件的对象。在这种情况下,解包将从指定位置开始(执行file.seek(offset))
refdata参数用于外部引用,请参见下面的
如果getptr为true,则此函数返回*unpacted,ptr*而不是仅返回*unpacted*。指针是解包结束时的偏移量
rawutil结构可以匹配可变长度,因此不存在任何*calcsize*函数。
string结构引用
----
结构是str对象。
要指定字节顺序,请与*struct*:
+——+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————+-————+
@使用系统字节顺序,不对齐
+——+——+———————————————————————————————————————————————————————————————|网络字节顺序(与>;)
+——+———————————————————————————————————————————————————————————————————————————————————————————————————————————————————+——————————————————————————————————————————————————————————————————————————————————————————————注意,与*struct*的结构不同,rawutil结构可以包含任意多的空间。
|键入description
+=+=+=+==+=+=+==+====+=======+=========+==================+
c char返回一个1字节字节对象----+
b int8有符号8位(1字节)整数
+——+—————————————————————————————————————————————————————-----------------+
b uint8无符号8位整数
+-------+------------+---------------------------+
?| bool从字节返回布尔值(如果为0,则为false,否则为true)
+——+——+———————————————————————————————————————————————————————————————————————————————————————————————----+
h uint16无符号16位整数
+——+——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————---————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————+---——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————ytes bytes对象,与"12c"不同,后者返回12个1字节的对象。还请注意,p和n不可用,n也不用作类似于*struct*
中的ssize,rawutil中还引入了新的格式字符:
+——+——+————————————————————————————————————————————————————————————————————|类型说明
+=+=+=+==+=+=+=+===+=====+========+======================+
u int24有符号24位(3字节)整数--——————————————————————————————————————————————————————————————————————————————————————-----------------------------------+
a pad alignment:对齐到指定数字的倍数
+-------+--------------------------------+
x hex与s类似,但返回的字节是十六进制string
+——+——+——————————+—————————————————————————————————————————————————————————————————————————————————————————————————————————发射型计算机断层扫描仪。从当前指针位置读取字符串,直到找到空字节(0x00)。返回的字符串中不包含空字节。在包装上,它包装了对象,并在末尾添加一个空字节。它应该像"20A"一样使用:数字表示对齐。解包时,它将指针放在对齐的下一个倍数处。它什么也不回。打包时,它将添加空字节,直到达到对齐长度的倍数(在数据参数中跳过它)
"$"元素表示结束。解包时,它将所有剩余的未读数据作为bytes对象返回,并结束读取(它将指针放在数据的末尾)。在打包时,它将相应的bytes对象附加到打包字节末尾的数据参数中,并结束打包。
imes
()元素表示一个组。其使用方式应为:
"4si2h(2b 2h)20a"
支架之间的所有元件将作为子结构在列表中展开。这里,它可以返回例如:
[b'test',10000,326,1919,[11,19,112,1222],b'\x00\x00']
应该这样使用:
"h 4[2b]"
它将读取子结构的次数与[。它将返回一个列表列表,如下所示:
[-1234,[[11,12],[111,112],[9,99],[31,112]]]
与[]一样,它返回一个列表列表。例如,这个结构:
<4s{bn}
引用类型:外部和内部引用。
外部引用用""表示。它们将替换为refdata参数中的相应元素。例如,使用此调用::
data=b'<;some bytes>;!"
rawutil.unpack(''0c 1s 2c',data,refdata=(1,len(data)-3,2))
"0"替换为1,"1"替换为(len(data)-3),这里10,"2"替换为2:最终结构为"1C10S 2C",因此它将返回:
[b'<;',b'一些字节',b'>;',b'!'b'!'b''b''b'>
[b'<;'b'<;''b'一些字节',b''b'>;''是的]
然后,内部引用。它们用"/"表示,应该这样使用:
'4s2b/2[2s]'
"/"附近的数字是引用的索引。引用将被指定索引处的未打包元素替换,这里是第二个"b",因此使用此数据:
[b'test',255,6,[[b'zy'],[b'xw'],[b'vu'],[b'ts'],[b'rq'],[b'po']]]
拆包的元素包含6,因此"/2"替换为"6",因此它被解释为"4s2b6[2s]",因此[2s]按元素2指定的次数被拆包。
内部引用也可以是相对的,用"/p"。例如,可以使用此结构:
'2b/p2[2s]
例如,4
objects
==
>还可以将rawutil与objects typereader和typewriter一起使用。
typereader(byteorder='@')
typewriter(byteorder='@')
byteorder参数是使用的byteorder标记,与格式字符串"one"完全相同。您还可以使用这些对象的byteorder属性指定它。
pack、unpack和unpack_from方法与模块级的方法完全相同,但如果字节顺序在结构中没有精确化,则默认为byte order属性而不是"@"。
它有以下方法:
bit(n,bit,length=1)
返回n整数中指定的位。返回(长度)位
nibbles(n)
返回一个字节的高位和低位nibbles
signed_nibbles(n)
返回一个字节的高位和低位signed nibbles
其所有其他方法都采用2个参数:
typereader.uint8(data,ptr=0)
ptr是开始读取的偏移量。如果没有,则从当前文件位置开始读取(由file.tell()给定),如果数据是类似字节的对象,则从0开始读取。它的所有其他方法返回(unpacted,ptr),其中unpacted是unpacted元素,ptr是读取结束的偏移量。
typereader对象有以下方法:
uint16(data,ptr=none)
uint24(data,ptr=none)
uint32(data,ptr=none)
uint64(data,ptr=none)
int8(data,ptr=none)
int16(data,ptr=none)
int24(data,ptr=none)
int32(data,ptr=none)
int64(data,ptr=none)
float32(data,ptr=none)=float(…)
double(data,ptr=none)
64位double
string(data,ptr=none)
int8(data,ptr=none)
int8(data,ptr=none)
int16(data,ptr=none)
int24(data,ptr=non字符串(数据,ptr=无)#以空结尾的utf-16字符串
然后,打字机对象可以打包一些元素。它有以下方法:(data参数是要打包的元素,out可以是输出文件一样的对象)::
signed nibbles(high,low)idem和signed nibbles
int8(data,out=none)
int16(data,out=none)
int24(data,out=none)
int32(data,
int64(data,out=out=none)
uint8(data,out=out=none)
uint16(data,out=none)
uint24(data,out=none)
uint32(data,out=none)
uint32(data,out=none)
uint64(data,out=none)
uint64(data,out=none)
int64(data,out=none)
int64(data,out=none)
int64(data,out=none=none)
uint8(data,out=none)
uint16(data,out=none)
打包。将bytes对象打包为以空结尾的字符串
utf16string(data,align=0,out=none)
pad(num)返回给定的空字节数
align(data,alignment)返回空字节以填充到对齐的倍数
==
一个处理二进制压缩数据的单文件纯python模块
结构
-对于打字机和打字机对象
<1-string结构
----
rawutil可以像struct一样使用,结构存储为string。rawutil几乎与struct完全兼容。如果在程序中,可以用"rawutil"替换"struct"的所有实例,则其工作方式应完全相同(有关问题,请参见下文)。
pack(stct,*data)->;bytes
将元素打包到一个bytes对象中,如structure sp所述由stct参数指定stct参数中的结构,并以列表形式返回元素
数据也可以是类似文件的对象。在这种情况下,解包将从文件的开头开始(它执行file.seek(0))
refdata选项是一个元组,它包含外部引用使用的数据,请参见下文。
请注意,与它的等效结构不同,如果数据长度不是匹配结构长度。
unpack_from(stct,data,offset=0,refdata=,getptr=false)
根据stct参数的说明从指定的偏移量解压缩数据,并返回元素作为列表
数据也可以是类似文件的对象。在这种情况下,解包将从指定位置开始(执行file.seek(offset))
refdata参数用于外部引用,请参见下面的
如果getptr为true,则此函数返回*unpacted,ptr*而不是仅返回*unpacted*。指针是解包结束时的偏移量
rawutil结构可以匹配可变长度,因此不存在任何*calcsize*函数。
string结构引用
----
结构是str对象。
要指定字节顺序,请与*struct*:
+——+————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————+-————+
@使用系统字节顺序,不对齐
+——+——+———————————————————————————————————————————————————————————————|网络字节顺序(与>;)
+——+———————————————————————————————————————————————————————————————————————————————————————————————————————————————————+——————————————————————————————————————————————————————————————————————————————————————————————注意,与*struct*的结构不同,rawutil结构可以包含任意多的空间。
|键入description
+=+=+=+==+=+=+==+====+=======+=========+==================+
c char返回一个1字节字节对象----+
b int8有符号8位(1字节)整数
+——+—————————————————————————————————————————————————————-----------------+
b uint8无符号8位整数
+-------+------------+---------------------------+
?| bool从字节返回布尔值(如果为0,则为false,否则为true)
+——+——+———————————————————————————————————————————————————————————————————————————————————————————————----+
h uint16无符号16位整数
+——+——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————---————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————+---——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————-+——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————ytes bytes对象,与"12c"不同,后者返回12个1字节的对象。还请注意,p和n不可用,n也不用作类似于*struct*
中的ssize,rawutil中还引入了新的格式字符:
+——+——+————————————————————————————————————————————————————————————————————|类型说明
+=+=+=+==+=+=+=+===+=====+========+======================+
u int24有符号24位(3字节)整数--——————————————————————————————————————————————————————————————————————————————————————-----------------------------------+
a pad alignment:对齐到指定数字的倍数
+-------+--------------------------------+
x hex与s类似,但返回的字节是十六进制string
+——+——+——————————+—————————————————————————————————————————————————————————————————————————————————————————————————————————发射型计算机断层扫描仪。从当前指针位置读取字符串,直到找到空字节(0x00)。返回的字符串中不包含空字节。在包装上,它包装了对象,并在末尾添加一个空字节。它应该像"20A"一样使用:数字表示对齐。解包时,它将指针放在对齐的下一个倍数处。它什么也不回。打包时,它将添加空字节,直到达到对齐长度的倍数(在数据参数中跳过它)
"$"元素表示结束。解包时,它将所有剩余的未读数据作为bytes对象返回,并结束读取(它将指针放在数据的末尾)。在打包时,它将相应的bytes对象附加到打包字节末尾的数据参数中,并结束打包。
imes
()元素表示一个组。其使用方式应为:
"4si2h(2b 2h)20a"
支架之间的所有元件将作为子结构在列表中展开。这里,它可以返回例如:
[b'test',10000,326,1919,[11,19,112,1222],b'\x00\x00']
应该这样使用:
"h 4[2b]"
它将读取子结构的次数与[。它将返回一个列表列表,如下所示:
[-1234,[[11,12],[111,112],[9,99],[31,112]]]
与[]一样,它返回一个列表列表。例如,这个结构:
<4s{bn}
引用类型:外部和内部引用。
外部引用用""表示。它们将替换为refdata参数中的相应元素。例如,使用此调用::
data=b'<;some bytes>;!"
rawutil.unpack(''0c 1s 2c',data,refdata=(1,len(data)-3,2))
"0"替换为1,"1"替换为(len(data)-3),这里10,"2"替换为2:最终结构为"1C10S 2C",因此它将返回:
[b'<;',b'一些字节',b'>;',b'!'b'!'b''b''b'>
[b'<;'b'<;''b'一些字节',b''b'>;''是的]
然后,内部引用。它们用"/"表示,应该这样使用:
'4s2b/2[2s]'
"/"附近的数字是引用的索引。引用将被指定索引处的未打包元素替换,这里是第二个"b",因此使用此数据:
[b'test',255,6,[[b'zy'],[b'xw'],[b'vu'],[b'ts'],[b'rq'],[b'po']]]
拆包的元素包含6,因此"/2"替换为"6",因此它被解释为"4s2b6[2s]",因此[2s]按元素2指定的次数被拆包。
内部引用也可以是相对的,用"/p"。例如,可以使用此结构:
'2b/p2[2s]
例如,4
objects
==
>还可以将rawutil与objects typereader和typewriter一起使用。
typereader(byteorder='@')
typewriter(byteorder='@')
byteorder参数是使用的byteorder标记,与格式字符串"one"完全相同。您还可以使用这些对象的byteorder属性指定它。
pack、unpack和unpack_from方法与模块级的方法完全相同,但如果字节顺序在结构中没有精确化,则默认为byte order属性而不是"@"。
它有以下方法:
bit(n,bit,length=1)
返回n整数中指定的位。返回(长度)位
nibbles(n)
返回一个字节的高位和低位nibbles
signed_nibbles(n)
返回一个字节的高位和低位signed nibbles
其所有其他方法都采用2个参数:
typereader.uint8(data,ptr=0)
ptr是开始读取的偏移量。如果没有,则从当前文件位置开始读取(由file.tell()给定),如果数据是类似字节的对象,则从0开始读取。它的所有其他方法返回(unpacted,ptr),其中unpacted是unpacted元素,ptr是读取结束的偏移量。
typereader对象有以下方法:
uint24(data,ptr=none)
uint32(data,ptr=none)
uint64(data,ptr=none)
int8(data,ptr=none)
int16(data,ptr=none)
int24(data,ptr=none)
int32(data,ptr=none)
int64(data,ptr=none)
float32(data,ptr=none)=float(…)
double(data,ptr=none)
64位double
string(data,ptr=none)
int8(data,ptr=none)
int8(data,ptr=none)
int16(data,ptr=none)
int24(data,ptr=non字符串(数据,ptr=无)#以空结尾的utf-16字符串
然后,打字机对象可以打包一些元素。它有以下方法:(data参数是要打包的元素,out可以是输出文件一样的对象)::
int8(data,out=none)
int16(data,out=none)
int24(data,out=none)
int32(data,
int64(data,out=out=none)
uint8(data,out=out=none)
uint16(data,out=none)
uint24(data,out=none)
uint32(data,out=none)
uint32(data,out=none)
uint64(data,out=none)
uint64(data,out=none)
int64(data,out=none)
int64(data,out=none)
int64(data,out=none=none)
uint8(data,out=none)
uint16(data,out=none)
打包。将bytes对象打包为以空结尾的字符串
utf16string(data,align=0,out=none)
pad(num)返回给定的空字节数
align(data,alignment)返回空字节以填充到对齐的倍数