Вопрос о пути к zip-файлу в Python Script - PullRequest
1 голос
/ 02 апреля 2020

Я использую следующий фрагмент кода, чтобы заархивировать файл из определенного каталога, однако, когда я распаковываю файл в targetPath, он создает другой путь к папке со следующей структурой:

/ u01 / backup / u01 / data / abc / xyz / logs.

Какие изменения могут быть внесены в скрипт для создания пути к папке:

/ u01 / backup / logs

, когда я его распаковываю.

#!/usr/bin/env python
import os
import sys
import zipfile
import datetime
def zipdir(path, ziph):
    # ziph is zipfile handle
    for root, dirs, files in os.walk(path):
        for file in files:
            ziph.write(os.path.join(root, file))
Time = datetime.datetime.now().strftime('%d-%b-%Y')
sourcePath = '/u01/data/abc/xyz/logs'
targetPath = '/u01/backup/'
fname = targetPath + 'backup-'+ str(Time)+'.zip'
if __name__ == '__main__':
    zipf = zipfile.ZipFile(fname, 'w', zipfile.ZIP_DEFLATED)
    zipdir(sourcePath, zipf)
    zipf.close()
sys.exit()

1 Ответ

0 голосов
/ 02 апреля 2020

Вы можете использовать перегруженную функцию ZipFile.write, чтобы указать имя внутри почтового индекса:

См. https://docs.python.org/3/library/zipfile.html#zipfile .ZipFile.write :

ZipFile.write (filename, arcname = Нет, compress_type = Нет, уровень сжатия = Нет)

Записать файл с именем filename в архив, присвоив ему имя архива arcname (по умолчанию это будет то же самое, что и имя файла, но без буквы диска и с удаленными начальными разделителями пути). [...]

Так что

 ziph.write(os.path.join(root, file), os.path.join('/u01/backup/logs',file) )

следует поместить ваши файлы в более подходящую папку внутри zip-файла - если вы хотите сохранить часть исходного пути, который вам нужно указать эту часть в качестве второго параметра для записи.

Вы можете использовать os.path.split / join для искажения имен файлов - см. https://docs.python.org/3.8/library/os.path.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...