The little things give you away... A collection of various small helper stuff
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.
 
 
 

32 рядки
693 B

  1. import os
  2. import sys
  3. import zlib
  4. def finditer(b, sub):
  5. pos = 0
  6. while True:
  7. pos = b.find(sub, pos)
  8. if pos < 0:
  9. break
  10. yield pos
  11. pos += 1
  12. with open(sys.argv[1], 'rb') as fp:
  13. fp.seek(int(sys.argv[2]), os.SEEK_SET)
  14. buffer = fp.read(int(sys.argv[3]))
  15. #print('Buffer length', len(buffer))
  16. for pos in finditer(buffer, b'\x1f\x8b'):
  17. #print('Trying', pos)
  18. if pos > len(buffer) - 512: # 512 bytes might be a bit too much, but at least it ensures that the decompression will work.
  19. break
  20. try:
  21. dec = zlib.decompressobj(zlib.MAX_WBITS | 32).decompress(buffer[pos:pos+512])
  22. except:
  23. continue
  24. #print(repr(dec))
  25. if dec.startswith(b'WARC/1.0\r\n'):
  26. print(int(sys.argv[2]) + pos)