Как определить, сжат ли файл gzip?
У меня есть программа Python, которая будет принимать текстовые файлы в качестве входных данных. Однако некоторые из этих файлов могут быть сжаты gzip. Существует ли кросс-платформенная, используемая с Python способ определить, сжат ли файл gzip или нет? Является ли следующий надежный или обычный обычный текстовый файл «случайно» выглядит как gzip-подобный, достаточный для получения ложных срабатываний?
try: gzip.GzipFile(filename, 'r') # compressed # ... except: # not compressed # ...
Спасибо, Райан
- Загрузка большого файла в ошибку python: сжатый файл закончился до того, как был достигнут маркер конца потока
- Python lzjb-декодер?
- Как можно копировать внутреннее состояние объекта компрессора zlib в Python
- Каков правильный способ сжатия и распаковки данных UTF-8 с помощью zlib?
- Как вы разархивируете очень большие файлы в python?
Магическое число для сжатых файлов gzip – 1f 8b
. Хотя тестирование для этого не на 100% надежное, маловероятно, что «обычные текстовые файлы» начинаются с этих двух байтов в UTF-8, это даже не законно.
Как правило, сжатые файлы gzip имеют суффикс .gz
. Даже сам gzip(1)
не будет распаковывать файлы без него, если вы --force
его. Вы могли бы использовать это, но вам все равно придется иметь дело с возможным IOError (что вам нужно в любом случае).
Одна из проблем с вашим подходом заключается в том, что gzip.GzipFile()
не будет генерировать исключение, если вы подадите его в несжатый файл. Только более поздняя read()
будет. Это означает, что вам, вероятно, придется дважды выполнить некоторую часть вашей программной логики. Некрасиво.
Импортируйте модуль mimetypes . Он может автоматически угадать, какой у вас файл, и если он сжат.
т.е.
mimetypes.guess_type('blabla.txt.gz')
возвращает:
('text / plain', 'gzip')
Кажется, что не работает в python3 …
import mimetypes filename = "./datasets/test" def file_type(filename): type = mimetypes.guess_type(filename) return type print(file_type(filename))
возвращает (None, None) Но из команды unix "File"
: ~> файловые наборы данных / тестовые наборы данных / тест: сжатые данные gzip, был «iostat_collection», из Unix, последний изменен: чт 29 января 07:09:34 2015
- Сюжет / Преобразование выражения, исходящего из sympy: серия Тейлора с matplotlib
- Минимальный список в Python с None?
- Что такое лучший Zip-модуль Python для обработки больших файлов?
- Как перечислить содержимое файла gzip без его извлечения в python?
- архив с открытием ошибок (7z) в python при создании 7zip
- Как читать имена файлов, включенные в файл gz
- Как сжать файл с помощью shutil.make_archive в python?
- Сжатый текст для хранения в базе данных mysql, должен ли он быть base64
- Как сжать текст?
- Как оценить сжимаемость файла без сжатия?
- сжатые файлы больше в h5py