python中压缩文件的正确方法

2024-03-29 10:31:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过压缩特定目录中的两个文本文件来创建一个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文件时,我发现整个目录结构都被压缩了。i、 当我打开文件时,我会发现用户打开它,然后用户1打开它,然后文档打开它,然后工作,然后文件tozip,然后我会找到我想要压缩的文件。我的问题是,如何才能得到红色的文件结构,所以当我打开压缩文件,我发现我压缩的文件马上?你知道吗

提前谢谢!你知道吗


Tags: 文件path用户name目录projectoszip
3条回答

ZipFile.writean optional second parameter ^{} 这正是你想要的。你知道吗

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()

对于Python2.7+,可以使用^{}

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

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)

相关问题 更多 >