Python - Zipfile без родительской папки - PullRequest
0 голосов
/ 24 сентября 2018

Я могу сжимать файлы в один zip-файл, однако, когда я открываю zip-файл, содержимое всегда включает «родительскую папку», имя которой совпадает с именем zip-файла.

Я просто пытаюсь создать zip-файл, который вообще не содержит папок.

Текущая версия: abc.zip> abc (папка)> files

Ищу:abc.zip> files

def create_zip(file_name, file_dir):
    """
    Function to create zip archive
    """
    os.chdir(file_dir)
    zipfiles_list = ['csv', 'txt']
    file_name_part = file_name
    zip_name = '{0}.zip'.format(file_name_part)
    with zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED) as 
    zip_archive:
        for file_extension in zipfile_list:
            full_file_path = '{0}.{1}'.format(file_name_part, file_extension)
            zip_archive.write(full_file_path, basename(full_file_path))

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

Исходный zip-файл извлекается в папку abc

Переименован тот же самый точный почтовый индекс и извлечение содержимого в папку с новым именем

1 Ответ

0 голосов
/ 25 сентября 2018

В вашем коде у вас есть ошибка в слове ' zipfiles ': for file_extension in zipfile_list: (без 's' в конце).

Это должно быть for file_extension in zipfiles_list:.

Чем я запускаю ваш код в Win7x86 - все нормально, нет внутренней папки (python 3.6.6).

Пробовал на Win 10x64 - тоже самое.

Xubuntu 18.04x64 - тоже самое, без папки.

Вот мой скрипт:

from os.path import basename 
from os import path
import os
import zipfile

# current directory
script_dir = path.dirname(path.abspath(__file__))

def create_zip(file_name, file_dir):
    """
    Function to create zip archive
    """
    os.chdir(file_dir)
    zipfiles_list = ['csv', 'txt']
    file_name_part = file_name
    zip_name = '{0}.zip'.format(file_name_part)
    with zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED) as zip_archive:
        for file_extension in zipfiles_list:
            full_file_path = '{0}.{1}'.format(file_name_part, file_extension)
            zip_archive.write(full_file_path, basename(full_file_path))

create_zip("first", script_dir)

В каталоге со скриптом есть два файла: first.txt и first.csv.После запуска этого скрипта у меня есть zip-файл first.zip с двумя файлами внутри: first.txt и first.csv.

...