Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import glob
- import os
- import lzma
- #
- # decode_file
- #
- def decode_file(path):
- basename = os.path.splitext(path)[0]
- decodedname = basename + ".decoded.csv"
- print("process:", path, "->", decodedname)
- with open(path, 'rb') as f:
- data = f.read()
- tempdata = bytearray()
- for i in range(0, 8):
- tempdata.append(data[i])
- for i in range(0, 4):
- tempdata.append(0)
- for i in range(8, len(data)):
- tempdata.append(data[i])
- try:
- with open(decodedname, 'wb') as f:
- unpack_data = lzma.decompress(tempdata)
- f.write(unpack_data)
- except:
- print("invalid input:", path)
- #
- # decode_file
- #
- def len_2_bytes(datalen, max_len=4):
- data = []
- while datalen > 0:
- item = datalen % 256
- datalen = int(datalen / 256)
- data.append(item)
- while len(data) < max_len:
- data.append(0)
- return data
- def encode_file(path, max_len=4):
- basename = os.path.splitext(path)[0]
- encodedname = basename + ".encoded.csv"
- print("process:", path, "->", encodedname)
- with open(path, 'rb') as f:
- data = f.read()
- filters = [
- {
- "id": lzma.FILTER_LZMA1,
- "dict_size": 256 * 1024,
- "lc": 3,
- "lp": 0,
- "pb": 2,
- "mode": lzma.MODE_NORMAL
- },
- ]
- pack_data = lzma.compress(data, format=lzma.FORMAT_ALONE, filters=filters)
- lzmadata = bytearray()
- for i in range(0, 5):
- lzmadata.append(pack_data[i])
- data_size = len_2_bytes(len(data), max_len)
- for size in data_size:
- lzmadata.append(size)
- for i in range(13, len(pack_data)):
- lzmadata.append(pack_data[i])
- #for i in range(0, len(lzmadata)):
- # print("i: ", i, " val: ", lzmadata[i])
- with open(encodedname, 'wb') as f:
- f.write(lzmadata)
- #
- # restore_file
- #
- def restore_file(path):
- with open(path, 'rb') as f:
- data = f.read()
- tempdata = bytearray()
- for i in range(0, 8):
- tempdata.append(data[i])
- for i in range(0, 4):
- tempdata.append(0)
- for i in range(8, len(data)):
- tempdata.append(data[i])
- with open('real.lzma', 'wb') as f:
- f.write(tempdata)
- def decode_dir(path):
- for filename in glob.iglob(path + '/**/*.csv', recursive=True):
- if "decoded.csv" in filename:
- continue
- decode_file(filename)
- decode_dir(sys.argv[1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement