Я пишу собственное приложение для передачи файлов (да, я знаю, оно уже существует миллион раз, но для меня это процесс обучения и помогает мне самостоятельно обучаться программированию) на Python. В рамках предварительного обмена файлами я хотел, чтобы клиент оценил сжатый размер данного файла или каталога перед сжатием в .tar с помощью LZMA. Проблема в том, что я не знаю, как оценить размер файла. Я не хочу выполнять сжатие, чтобы получить размер без записи файлов, поскольку это эффективно сожмет файл/папку дважды. Не говоря уже о том, что цель оценки предварительного сжатия состоит в том, чтобы проверить, есть ли на сервере (и клиенте) место для хранения файла перед трудоемким ресурсоемким сжатием. Единственный другой вариант, о котором я знаю, — это магические числа, определенные для угадывания размера, которые выполняются очень быстро и практически не требуют ресурсов.
Код: Выделить всё
def estimateCompressionSize(filePath: Path) -> int:
if filePath.is_dir():
totalSize = 0
for x in filePath.rglob("*"):
totalSize += estimateCompressionSize(x)
return totalSize
ext = filePath.suffix.lower()
if ext in ("a", "b", "c"):
compEstimate = 1.0
elif ext in ("x", "y", "z"):
compEstimate = 0.20
else:
compEstimate = 0.65
return int(filePath.stat().st_size * compEstimate)
Итак, я уже создал итератор предполагаемого сжатия, который просто проверяет типы файлов, считывает текущий размер и делит его на магические числа в зависимости от типа файла, чтобы оценить размер, как вы можете видеть выше. Я просто не знаю, какие магические числа использовать. Я не могу найти в Интернете никакой информации, кроме одного источника с tukaani.org, но там указано только несколько типов файлов, и у меня нет знаний или способностей, чтобы сделать вывод о схожих типах файлов на основе тех, что сделал Тукаани. Я пробовал много-много поисковых запросов в Google, пытался искать здесь, даже пытался спросить ИИ (он просто выплевывал ерунду о психозе, которую я не мог проверить или сохранить), но ничего не нашел.
Итак, мне было интересно, найдет ли здесь какой-нибудь умный человек какие-нибудь ответы для меня?