zip-файл архивируется в папку dir проекта по умолчанию, а не в dir-файл - PullRequest
0 голосов
/ 23 мая 2019

мой код:

    def zip_file(path, zip_file_name ,root):
    ziph = zipfile.ZipFile(zip_file_name, 'w', zipfile.ZIP_DEFLATED)
    ziph.write(path, arcname= os.path.join(root, os.path.splitext(zip_file_name)[0]))
    #os.remove(path)
    ziph.close()

def zip_dir(dir_to_zip):
    for root, dirs, files in os.walk(dir_to_zip):
        for curr_file in files:
            fullFilePath = os.path.join(root, curr_file)
            if not curr_file.endswith('.zip'):
                zip_file(fullFilePath, "{}.zip".format(fullFilePath), root)

if __name__ == '__main__':

    zip_dir('C:\\Users\\My_namne\\Desktop\\TEST')

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

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Первым аргументом zipfile.ZipFile должен быть полный путь к архиву, который вы создаете. Внесите изменения в zip_dir

def zip_dir(dir_to_zip):
    for root, dirs, files in os.walk(dir_to_zip):
        for curr_file in files:
            fpath = os.path.join(root, curr_file)
            zip_file(fpath, "{}.zip".format(fpath),root)

Это создаст архив для каждого файла в его каталоге. Архив будет содержать только сам файл, а не полный путь к файлу.

import os, zipfile
def zip_file(filepath, zipfilepath ,curr_file):
    with zipfile.ZipFile(zipfilepath, 'w', zipfile.ZIP_DEFLATED) as ziph:
        ziph.write(filepath, arcname=curr_file)

def zip_dir(dir_to_zip):
    for root, dirs, files in os.walk(dir_to_zip):
        for curr_file in files:
            if not curr_file.endswith('.zip'):
                filepath = os.path.join(root, curr_file)
                zipfilepath = "{}.zip".format(filepath)
                zip_file(filepath, zipfilepath, curr_file)
0 голосов
/ 24 мая 2019
def zip_file(filename):
    zip_filename = os.path.splitext(filename)[0] + '.zip'
    f = zipfile.ZipFile(zip_filename, 'w')
    f.write(filename, os.path.basename(filename), zipfile.ZIP_DEFLATED)
    f.close()
    return zip_filename


def zip_dir(dir_to_zip):
    for root, dirs, files in os.walk(dir_to_zip):
        for curr_file in files:
            fullFilePath = os.path.join(root, curr_file)
            if not curr_file.endswith('.zip'):
                zip_file(fullFilePath)

это работает

...