The little things give you away... A collection of various small helper stuff
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 

32 lignes
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)