我正在尝试通过从特定目录中压缩几个文本文件来创建zip文件。我的代码如下所示:
import zipfile,os
project='C:/Users/user1/Documents/work/filesToZip'
dirlist = os.listdir(project)
print dirlist
zip_name = zipfile.ZipFile(os.path.join(project,'jobs.zip'),'w')
for file in dirlist:
zip_name.write(os.path.join(project,file))
zip_name.close()
代码运行正常,它创建了zip文件,唯一的问题是当我打开zip文件时,我发现整个目录结构都是压缩的。即,当我打开文件时,我会发现用户打开它然后user1打开它然后文件打开然后工作然后filesToZip然后我找到我想要压缩的文件。我的问题是如何才能获得文件结构的红色,所以当我打开zip文件时,我发现我立刻压缩了文件?
提前致谢!
答案 0 :(得分:2)
ZipFile.write
有an optional second parameter archname
这正是你想要的。
import zipfile,os
project='C:/Users/user1/Documents/work/filesToZip'
# prevent adding zip to itself if the old zip is left in the directory
zip_path = os.path.join(project,'jobs.zip')
if os.path.exists(zip_path):
os.unlink(zip_path);
dirlist = os.listdir(project)
zip_file = zipfile.ZipFile(zip_path, 'w')
for file_name in dirlist:
zip_file.write(os.path.join(project, file_name), file_name)
zip_file.close()
答案 1 :(得分:1)
对于python 2.7+,您可以改为使用shutil
:
from shutil import make_archive
make_archive(
'zipfile_name',
'zip', # the archive format - or tar, bztar, gztar
root_dir=None, # root for archive - current working dir if None
base_dir=None) # start archiving from here - cwd if None too
这样您就可以明确指定哪个目录应该是root_dir
,哪个目录应该是base_dir
。如果root_dir
和base_dir
不相同,则只会压缩base_dir
中的文件,但会将目录结构保留为root_dir
答案 2 :(得分:1)
import zipfile,os
project='C:/Users/user1/Documents/work/filesToZip'
original_dir= os.getcwd()
os.chdir(project)
dirlist = os.listdir(".")
print dirlist
zip_name = zipfile.ZipFile('./jobs.zip','w')
for file in dirlist:
zip_name.write('./'+file)
zip_name.close()
os.chdir(original_dir)