from re import sub
def decompress(edi):
decompressed = ""
last_compressor = 0
for i, c in enumerate(edi):
if c == "\x1D":
repetitions = int(edi[i + 1: i + 3], 16)
repeating_char = edi[i + 3]
decompressed += edi[last_compressor:i] + repeating_char * repetitions
last_compressor = i + 4
decompressed += edi[last_compressor:-1]
return sub("\r\n|\n|\r", decompressed)
我是怎么读代码的
可以忽略这一点,但这可能会有所帮助。
鉴于
edi
它有一个
len
,每个
电子数据交换
那是匹配的
\x1D
,获取的子字符串
EDI
来自
index + 1
到
index + 3
作为十六进制整数设置为
decimal
。这个
repeater
是
索引+3
'的第个元素
电子数据交换
str
。它将重复中定义的十六进制次数。
十进制的
,但仅在
电子数据交换
从
lastCompressor
到当前索引。在每次迭代中
\x1D
是匹配的,
末级压缩机
增加4。