#!/usr/bin/python """Tells you whether a file is a valid zipfile by reading its end.""" import sys def is_zip_name(filename): "Returns true if filename names a zipfile." return is_zip(open(filename, 'rb')) def is_zip(f): "Returns true if open seekable file object f is open on a zipfile." chunksize = 1024 f.seek(0, 2) chunksize = min(f.tell(), chunksize) f.seek(-chunksize, 1) s = f.read(chunksize) i = 0 while True: i = s.find("PK\5\6", i+1) if i == -1: return False comment_length = ord(s[i+20]) | ord(s[i+21]) << 8 if comment_length == chunksize - i - 22: return True if __name__ == '__main__': for filename in sys.argv[1:]: print filename, "zipfile" if is_zip_name(filename) else "no"