Как создать zip для одного файла?
Попробовал использовать shutil.make_archive для создания архива из файла, а не папки, т.к. на английском стеке кто-то выложил ответ с таким решением, но у меня файл в архиве лежал не в корне, а по пути повторяющем его текущий путь, типа:
C:\Users\ipetrash\PycharmProjects\SimplePyScripts\sqlite3__examples\databases\backup\backup_2024-07-01.db.zip\Users\ipetrash\PycharmProjects\SimplePyScripts\sqlite3__examples\databases\backup
Для:
import shutil
print(shutil.make_archive(file_name_backup.name, "zip", DIR_DB_BACKUP, file_name_backup))
# C:\Users\ipetrash\PycharmProjects\SimplePyScripts\sqlite3__examples\backup_2024-07-01.db.zip
print(shutil.make_archive(file_name_backup, "zip", DIR_DB_BACKUP, file_name_backup))
# C:\Users\ipetrash\PycharmProjects\SimplePyScripts\sqlite3__examples\databases\backup\backup_2024-07-01.db.zip
Подозреваю, что если менять текущую активную директорию перед архивированием, то это поможет размещать файл в архив в корне, но это не теория, да и потом возвращать его... Неудобно...
Какое может быть решение?
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Нашел решение через работу с zipfile.ZipFile
import zipfile
from pathlib import Path
def create_zip_for_file(file_name_zip: str | Path, file_name: Path, delete_file_name: bool = True):
with zipfile.ZipFile(file_name_zip, mode="w", compression=zipfile.ZIP_DEFLATED) as f:
f.write(file_name, arcname=file_name.name)
if delete_file_name:
file_name.unlink()
Пример использования, чтобы архивировать текущий файл скрипта:
FILE_NAME = Path(__file__).resolve()
create_zip_for_file(f"{FILE_NAME}.zip", FILE_NAME, delete_file_name=False)