无论如何,我可以使用zipfile将动态生成的内容(例如新呈现的html模板)压缩到zip文件中吗?
对于压缩静态内容似乎有一些例子,但是没有用于压缩动态内容的例子.或者,它根本不可能吗?
还有一个问题:是否可以创建一个包含一堆子文件夹的zip文件?
谢谢.
由于某种原因,我无法让cPickle.load处理ZipFile.open()返回的文件类型对象.如果我在ZipFile.open()返回的文件类型对象上调用read(),我可以使用cPickle.loads.
示例....
import zipfile
import cPickle
# the data we want to store
some_data = {1: 'one', 2: 'two', 3: 'three'}
#
# create a zipped pickle file
#
zf = zipfile.ZipFile('zipped_pickle.zip', 'w', zipfile.ZIP_DEFLATED)
zf.writestr('data.pkl', cPickle.dumps(some_data))
zf.close()
#
# cPickle.loads works
#
zf = zipfile.ZipFile('zipped_pickle.zip', 'r')
sd1 = cPickle.loads(zf.open('data.pkl').read())
zf.close()
#
# cPickle.load doesn't work
#
zf = zipfile.ZipFile('zipped_pickle.zip', 'r')
sd2 = cPickle.load(zf.open('data.pkl'))
zf.close()
Run Code Online (Sandbox Code Playgroud)
注意:我不想仅仅压缩pickle文件,而是压缩其他类型的许多文件.这只是一个例子.
如果我使用Python ZipFile库解压Zip文件,其中文件是在Windows上创建的,但我的代码在类Unix上运行,路径分隔符是否总是Unix风格?
我有一个本地文件夹中的zip和rar文件列表.
我需要做的就是提取zip文件的内容以及rar文件,并将它们保存在与相应存档文件同名的文件夹中.
由于我是as3的新手,我对此毫无头绪.
这个有没有图书馆?
提前致谢...
我有一个.zip文件,想知道其中的文件名.这是代码:
zip_path = glob.glob(path + '/*.zip')[0]
file = open(zip_path, 'r') # opens without error
if zipfile.is_zipfile(file):
print str(file) # prints to console
my_zipfile = zipfile.ZipFile(zip_path) # throws IOError
Run Code Online (Sandbox Code Playgroud)
这是追溯:
<open file u'/Users/me/Documents/project/uploads/assets/peter/offline_message/offline_imgs.zip', mode 'r' at 0x107b2a150>
Traceback (most recent call last):
File "/Users/me/Documents/project/admin_dev/proj_name/views.py", line 1680, in get_dps_app_builder_assets
link_to_assets_zip = zip_dps_app_builder_assets(server_url, app_slug, button_slugs)
File "/Users/me/Documents/project/admin_dev/proj_name/views.py", line 1724, in zip_dps_app_builder_assets
my_zipfile = zipfile.ZipFile(zip_path)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 712, in __init__
self._GetContents()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 746, in _GetContents
self._RealGetContents()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/zipfile.py", line 779, in …Run Code Online (Sandbox Code Playgroud) 我在C#中创建了一个程序,它处理了大约30个压缩文件夹,总共有35000个文件.我的目的是读取每个文件以处理其信息.截至目前,我的代码提取所有文件夹,然后读取文件.这个过程的问题是它需要大约15-20分钟,这是很多.
我使用以下代码来提取文件:
void ExtractFile(string zipfile, string path)
{
ZipFile zip = ZipFile.Read(zipfile);
zip.ExtractAll(path);
}
Run Code Online (Sandbox Code Playgroud)
提取部分是花费最多时间处理的部分.我需要减少这个时间.有没有办法我可以读取压缩文件夹中的文件内容而不提取它们?或者,如果有人知道任何其他方式可以帮助我减少此代码的时间?
提前致谢
我正在使用zipfile,在某些情况下,我需要为占位符目的创建一个空的zip文件.我怎样才能做到这一点?
我知道这个:
在2.7.1版中更改:如果文件是使用模式"a"或"w"创建的,然后在不向归档添加任何文件的情况下关闭,则将为文件写入空归档的相应ZIP结构.
但我的服务器使用较低版本2.6.
我有一个从库调用读取的字节缓冲区,我想解压缩单个文本文件的内容.
我试过了zlib,但是我收到了这个错误:
>>> import zlib
>>> zlib.decompress(buffer)
error: Error -3 while decompressing data: incorrect header check
Run Code Online (Sandbox Code Playgroud)
但ZipFile它有效,但我必须使用临时文件:
import zipfile
f = open('foo.zip', 'wb')
f.write(buffer)
f.close()
z = ZipFile('foo.zip')
z.extractall()
z.close()
with open('foo.txt', 'r') as f:
uncompressed_buffer = f.read()
Run Code Online (Sandbox Code Playgroud)
是否可以使用zlib,如何避免使用临时文件?
我正在尝试创建一个zip文件作为目录的备份,并最终将该备份保存在该目录中的"backups"文件夹中.例如,"文件夹"包括"subFolder","file1.txt","file2.txt"和"backups"."backups"文件夹将包含各种早期备份文件.我想创建一个"文件夹"及其所有内容的存档,包括子文件夹,但不包括"备份".
这是我最初想要使用的:
ZipFile.CreateFromDirectory(folderToZip, backupFileName);
Run Code Online (Sandbox Code Playgroud)
我意识到在压缩文件夹中保存zip文件存在问题,因此我打算将其保存在其他地方,然后将其传输.但我不知道如何在没有备份文件夹的情况下轻松创建存档.我唯一的想法是以递归的方式编写我自己的方法遍历目录并排除那个文件夹.似乎必须有一个更简单的方法.
任何帮助将不胜感激!
我有一个Laravel网络应用程序,用户可以在其中上传文件.这些文件可能很敏感,虽然它们存储在S3上,但只能通过我的网络服务器访问(流下载).上传后,用户可能希望下载这些文件的选择.
以前,当用户下载一系列文件时,我的Web服务器会从S3下载文件,在本地压缩,然后将zip发送到客户端.但是,由于文件大小一旦投入生产,服务器响应会经常超时.
作为一种替代方法,我想通过ZipStream动态压缩文件,但我没有太多运气.zip文件最终会损坏文件,或者自身损坏并且非常小.
如果可以将S3上的文件的流资源传递给ZipStream,解决超时问题的最佳方法是什么?
我尝试了几种方法,我最近的两种方法如下:
// First method using fopen
// Results in tiny corrupt zip files
if (!($fp = fopen("s3://{$bucket}/{$key}", 'r')))
{
die('Could not open stream for reading');
}
$zip->addFileFromPath($file->orginal_filename, "s3://{$bucket}/{$key}");
fclose($fp);
// Second method tried get download the file from s3 before sipping
// Results in a reasonable sized zip file that is corrupt
$contents = file_get_contents("s3://{$bucket}/{$key}");
$zip->addFile($file->orginal_filename, $contents);
Run Code Online (Sandbox Code Playgroud)
每个都位于一个遍历每个文件的循环中.在循环之后我调用$ zip-> finish().
注意我没有得到任何PHP错误只是损坏文件.