Форум сайта python.su
# -*- coding: utf-8 -*- import codecs, sys sys.stdout = codecs.getwriter('cp866')(sys.stdout, errors='replace') import zipfile f = zipfile.ZipFile('C:\\Temp\\test.zip', 'w', zipfile.ZIP_DEFLATED) f.write(u'C:\\Temp\\Папочка\\Имечко файла на русском.doc'.encode('cp1251')) f.close()
Офлайн
привет, попробую ответить по-порядку, сам недавно только с зипом ковырялся:
1.
# -*- coding: utf-8 -*-
nameA = name.decode ("utf-8").encode ("cp866")
zipObj = zipfile.ZipFile(archName,'a',zipfile.ZIP_DEFLATED)
zipObj.write(name,nameA,None)
os.chdir (sourceF)
Отредактировано (Дек. 11, 2009 22:35:19)
Офлайн
Большое спасибо! Первые два вопроса решены:
# -*- coding: utf-8 -*- import zipfile arch = u'C:\\Temp\\файл архива.zip' f = zipfile.ZipFile(arch, 'w', zipfile.ZIP_DEFLATED) name = u'C:\\Temp\\Папка\\имя файла.txt' nameA = u'Путь в архиве задаётся как угодно\\имя файла в архиве.txt'.encode('cp866') f.write(name, nameA) f.close()
Офлайн
Рекурсивно это как раз таки и обойти все вложенные каталоги и запаковать все файлы :)
Офлайн
The gray Cardinaldecode использовал, так как путь из текстовика выхватывал, а вот по поводу того, что путь архивов самому в архиве прописывать можно - не подумал :)
Большое спасибо! Первые два вопроса решены:По первому вопросу: как оказалось, явного вызова decode не требуется, достаточно просто u'строка'.# -*- coding: utf-8 -*- import zipfile arch = u'C:\\Temp\\файл архива.zip' f = zipfile.ZipFile(arch, 'w', zipfile.ZIP_DEFLATED) name = u'C:\\Temp\\Папка\\имя файла.txt' nameA = u'Путь в архиве задаётся как угодно\\имя файла в архиве.txt'.encode('cp866') f.write(name, nameA) f.close()
По второму вопросу: как оказалось, путь в архиве можно указывать произвольно, поэтому смены каталога тоже не нужно.
Осталось решить третий вопрос ;).
Офлайн
LolkaНу почему же? Рекурсивно - это когда вместо write('путь к файлу') можно написать что-то вроде writeRecursively('путь к каталогу') :lol:. Впрочем, как оказалось, использовать os.walk в данном случае тоже несложно.
Рекурсивно это как раз таки и обойти все вложенные каталоги и запаковать все файлы
Офлайн
Итоги своих изысканий зафиксировал здесь:
http://forum.script-coding.info/viewtopic.php?id=1009
Если что не так, прошу высказываться.
Офлайн
The gray Cardinal как я понимаю zipfile работает как pickle-файл - особенно на разархивирование - большая проблема, когда в архиве большие файлы - просто может ОЗУ не хватить.
Офлайн
pythonwinА какие есть варианты для таких случаев?
как я понимаю zipfile работает как pickle-файл - особенно на разархивирование - большая проблема, когда в архиве большие файлы - просто может ОЗУ не хватить.
Офлайн
разархивировать через unzip
Офлайн