The magic number for gzip compressed files is 1f 8b
. Although testing for this is not 100% reliable, it is highly unlikely that “ordinary text files” start with those two bytes—in UTF-8 it’s not even legal.
Usually gzip compressed files sport the suffix .gz
though. Even gzip(1)
itself won’t unpack files without it unless you --force
it to. You could conceivably use that, but you’d still have to deal with a possible IOError (which you have to in any case).
One problem with your approach is, that gzip.GzipFile()
will not throw an exception if you feed it an uncompressed file. Only a later read()
will. This means, that you would probably have to implement some of your program logic twice. Ugly.