Ran into a situation where an external vendor started sending csv files gzipped. The trouble was they started zipping only larger files. Since the system that ingested the files would break on a gz file I needed a routine to unzip the gz files and leave the non-zipped files alone.
def unzip_if_necessary(self, filename): print "unzip_if_necessary: " + filename f = open(filename) # Read magic number (the first 2 bytes) and rewind. magic_number = f.read(2) f.seek(0) f.close() if magic_number == '\x1f\x8b': print "gzip file" data = '' # with gzip.GzipFile(fileobj=f) as f: with gzip.open(filename, 'rb') as f: data = f.read() print "Writing to " + filename with open(filename, "w") as f: f.write(data) else: print "csv file"