LINUX.ORG.RU

python + zipfile


0

1

Всем привет. Есть скрипт по созданию zip файла. Юзаю встроенную библиотеку zipfile. Пытаюсь проверить созданный архив после его создания. И всегда получаю, что архив битый. Хотя если проверят 7zip архив целый. Для проверки юзаю его внутрен параметр. Согласно доке https://docs.python.org/3.7/library/zipfile.html

 ZipFile.testzip()
    Read all the files in the archive and check their CRC’s and file headers. Return the name of the first bad file, or else return None.
Тестовый арихв состоит из 2 папок(1 пустая,2 с текс.документом) 2 архива c 7z-архивами, 1 ворд. документа.
В чем может быть ошибка. Кто юзал эту либу. Сам код:
import os
import zipfile
from zipfile import ZIP_LZMA
import shutil
path_folder = "C:\\Temp\\test_7zip"
archive_name = '111111.zip'
zip_file_test = zipfile.ZipFile(archive_name, mode='w', compression=ZIP_LZMA, allowZip64=True)

rootdir = os.path.basename(path_folder)

for  dirpath, dirnames, filenamaes in os.walk(path_folder):
    for filenama in filenamaes:
        filepath = os.path.join(dirpath, filenama)
        parentpath = os.path.relpath(filepath, path_folder)
        arcname = os.path.join(rootdir, parentpath)
        zip_file_test.write(filepath, arcname)
test_archive = zip_file_test.testzip()
print(test_archive)
if test_archive is not None:
    print(f"Archive is corrupted")
else:
    print(f" Archive is not corrupted")
zip_file_test.close()



Последнее исправление: vip71541 (всего исправлений: 1)

А может стоит сначала дописать до конца файл, закрыть его, потом открыть на чтение и уже проверять?

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

пробовал и так. Но он ругается на то что архив уже закрыт. И как я понимаю документацию, что только можно открыть сам файл(определенный) в архиве. Но я так и не могу понять почему при проверке он ругается на вполне целые файлы

vip71541
() автор топика
Ответ на: комментарий от vip71541

Но он ругается на то что архив уже закрыт

Значит ты что-то не так делаешь, например всё ещё пытаешься вызывать testzip на объекте через который пишешь.

% cat 1.py
#!/usr/bin/env python3

import zipfile

with zipfile.ZipFile('test.zip', mode='w') as zip_write:
    zip_write.write(__file__)

with zipfile.ZipFile('test.zip', mode='r') as zip_read:
    print('OK' if zip_read.testzip() is None else 'Corrupted')
% ./1.py 
OK
% tar tf test.zip
1.py
slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.