我通读了zipfile模块文档,但无法理解如何解压缩文件,只知道如何压缩文件.如何将zip文件的所有内容解压缩到同一目录中?
如何从zip存档中打开文件而不先解压缩?
我正在使用pygame.为了节省磁盘空间,我将所有图像都压缩了.是否可以直接从zip文件加载给定的图像?例如:
pygame.image.load('zipFile/img_01')
我做了一个小帮手功能:
import zipfile
def main(archive_list=[],zfilename='default.zip'):
print zfilename
zout = zipfile.ZipFile(zfilename, "w")
for fname in archive_list:
print "writing: ", fname
zout.write(fname)
zout.close()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
问题是我的所有文件都没有被压缩!这些文件的大小相同,实际上只是扩展名被更改为".zip"(在本例中为".xls").
我在winXP sp2上运行python 2.5.
我在两个不同的目录中有两个文件,一个是'/home/test/first/first.pdf'
,另一个是'/home/text/second/second.pdf'
.我使用以下代码来压缩它们:
import zipfile, StringIO
buffer = StringIO.StringIO()
first_path = '/home/test/first/first.pdf'
second_path = '/home/text/second/second.pdf'
zip = zipfile.ZipFile(buffer, 'w')
zip.write(first_path)
zip.write(second_path)
zip.close()
Run Code Online (Sandbox Code Playgroud)
我打开我创建的zip文件后,我有一个home
在它的文件夹,然后有两个子文件夹在里面,first
和second
,则PDF文件.我不知道如何只包含两个pdf文件,而不是将完整路径压缩到zip存档中.我希望我的问题清楚,请帮忙.谢谢.
我想创建一个zip文件.将文件夹添加到zip文件,然后将一堆文件添加到该文件夹.
所以我想最终得到一个带有文件的单个文件夹的zip文件.
我不知道在zip文件中有文件夹或谷歌的东西是不是很糟糕的做法.
我从这开始:
def addFolderToZip(myZipFile,folder):
folder = folder.encode('ascii') #convert path to ascii for ZipFile Method
for file in glob.glob(folder+"/*"):
if os.path.isfile(file):
print file
myZipFile.write(file, os.path.basename(file), zipfile.ZIP_DEFLATED)
elif os.path.isdir(file):
addFolderToZip(myZipFile,file)
def createZipFile(filename,files,folders):
curTime=strftime("__%Y_%m_%d", time.localtime())
filename=filename+curTime;
print filename
zipFilename=utils.getFileName("files", filename+".zip")
myZipFile = zipfile.ZipFile( zipFilename, "w" ) # Open the zip file for writing
for file in files:
file = file.encode('ascii') #convert path to ascii for ZipFile Method
if os.path.isfile(file):
(filepath, filename) = os.path.split(file)
myZipFile.write( file, filename, zipfile.ZIP_DEFLATED )
for folder in …
Run Code Online (Sandbox Code Playgroud) 当我从使用Python zipfile
模块创建的ZIP文件中提取文件时,所有文件都不可写,只读等.
该文件是在Linux和Python 2.5.2下创建和提取的.
我可以说,我需要ZipInfo.external_attr
为每个文件设置属性,但这似乎没有记录在任何我能找到的地方,有人可以启发我吗?
如何将zip解压缩到内存中?
我尝试(返回None
上.getvalue()
):
from zipfile import ZipFile
from StringIO import StringIO
def extract_zip(input_zip):
return StringIO(ZipFile(input_zip).extractall())
Run Code Online (Sandbox Code Playgroud) 我尝试从包含一个文件夹中的子文件夹的.zip中提取所有文件.我希望子文件夹中的所有文件只在一个文件夹中提取,而不保留原始结构.此刻,我提取所有内容,将文件移动到文件夹,然后删除以前的子文件夹.具有相同名称的文件被覆盖.
在写文件之前可以这样做吗?
这是一个结构,例如:
my_zip/file1.txt
my_zip/dir1/file2.txt
my_zip/dir1/dir2/file3.txt
my_zip/dir3/file4.txt
Run Code Online (Sandbox Code Playgroud)
最后我告诉你:
my_dir/file1.txt
my_dir/file2.txt
my_dir/file3.txt
my_dir/file4.txt
Run Code Online (Sandbox Code Playgroud)
我可以在此代码中添加什么内容?
import zipfile
my_dir = "D:\\Download\\"
my_zip = "D:\\Download\\my_file.zip"
zip_file = zipfile.ZipFile(my_zip, 'r')
for files in zip_file.namelist():
zip_file.extract(files, my_dir)
zip_file.close()
Run Code Online (Sandbox Code Playgroud)
如果我从zip_file.namelist()重命名文件路径,我有这个错误:
KeyError: "There is no item named 'file2.txt' in the archive"
Run Code Online (Sandbox Code Playgroud) 我有两个zip文件,它们都可以通过Windows资源管理器和7-zip打开.
然而,当我用Python的zipfile模块[zipfile.ZipFile("filex.zip")]打开它们时,其中一个打开但另一个给出错误" BadZipfile: File is not a zip file
".
我确保后者是一个有效的Zip文件,用7-Zip打开并查看其属性(7Zip.ZIP说).当我用文本编辑器打开文件时,前两个字符是"PK",表明它确实是一个zip文件.
我正在使用Python 2.5,并且真的没有任何线索如何解决这个问题.我已经尝试过Windows和Ubuntu,并且两个平台都存在问题.
更新: Windows上的Python 2.5.4的回溯:
Traceback (most recent call last):
File "<module1>", line 5, in <module>
zipfile.ZipFile("c:/temp/test.zip")
File "C:\Python25\lib\zipfile.py", line 346, in init
self._GetContents()
File "C:\Python25\lib\zipfile.py", line 366, in _GetContents
self._RealGetContents()
File "C:\Python25\lib\zipfile.py", line 378, in _RealGetContents
raise BadZipfile, "File is not a zip file"
BadZipfile: File is not a zip file
Run Code Online (Sandbox Code Playgroud)
基本上,当_EndRecData
调用函数从中央目录结束"记录中获取数据时,注释长度检出失败[endrec [7] == len(comment)].
函数中locals的值_EndRecData
如下:
END_BLOCK: 4096,
comment: '\x00',
data: '\xd6\xf6\x03\x00\x88,N8?<e\xf0q\xa8\x1cwK\x87\x0c(\x82a\xee\xc61N\'1qN\x0b\x16K-\x9d\xd57w\x0f\xa31n\xf3dN\x9e\xb1s\xffu\xd1\.....', (truncated)
endrec: …
Run Code Online (Sandbox Code Playgroud)