在python

时间:2016-06-06 20:28:04

标签: python zip

我正在尝试通过从特定目录中压缩几个文本文件来创建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文件时,我发现我立刻压缩了文件?

提前致谢!

3 个答案:

答案 0 :(得分:2)

ZipFile.writean 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_dirbase_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)