Я хочу создать zip-файл из нескольких отдельных файлов. Вот мой код:
from zipfile import ZipFile
from os import walk
name = 'Mia'
allFiles = next(walk("C:\\Users\\jack_l\\Documents\\Image-Line\\FL Studio\\Projects\\finished\\UPLOAD"), (None, None, []))[2]
allStemFiles = []
for counter in range(len(allFiles)):
if str('STEMS - '+name) in allFiles[counter]:
allStemFiles.append(allFiles[counter])
myZipFile = ZipFile(r'C:\Users\jack_l\Documents\Image-Line\FL Studio\Projects\finished\UPLOAD\beatTitle.zip', 'w')
for counter in range(len(allStemFiles)):
myZipFile.write('C:\\Users\\jack_l\\Documents\\Image-Line\\FL Studio\\Projects\\finished\\UPLOAD\\'+allStemFiles[counter])
myZipFile.close()
Моя проблема в том, что он создает zip-файл в правильном каталоге (C:..../UPLOAD), но создаваемый zip-файл содержит 8 слоев папок поверх файлов. Например, zip-файл содержит папку с именем Users, которая содержит папку с именем jack_l, и так далее, пока папка с именем UPLOAD не будет содержать мои файлы.
Я попытался исправить это, написав:
myZipFile.write(allStemFiles[counter])
вместо:
myZipFile.write('C:\\Users\\jack_l\\Documents\\Image-Line\\FL Studio\\Projects\\finished\\UPLOAD\\'+allStemFiles[counter])
но затем я получаю следующую ошибку:
Любая помощь будет принята с благодарностью. Просто повторить; Мне нужен zip-файл, содержащий только файлы (никаких папок). Спасибо.
Вы можете изменить рабочий каталог на базовый каталог файлов, которые нужно заархивировать в первую очередь, чтобы все пути стали относительными к базовому каталогу:
from zipfile import ZipFile
import os
name = 'Mia'
os.chdir("C:\\Users\\jack_l\\Documents\\Image-Line\\FL Studio\\Projects\\finished\\UPLOAD")
allFiles = next(os.walk("."), (None, None, []))[2]
allStemFiles = []
for counter in range(len(allFiles)):
if str('STEMS - '+name) in allFiles[counter]:
allStemFiles.append(allFiles[counter])
myZipFile = ZipFile('beatTitle.zip', 'w')
for counter in range(len(allStemFiles)):
myZipFile.write(allStemFiles[counter])
myZipFile.close()