27
A
回答
31
改編的the script版本是:
#!/usr/bin/env python
from __future__ import with_statement
from contextlib import closing
from zipfile import ZipFile, ZIP_DEFLATED
import os
def zipdir(basedir, archivename):
assert os.path.isdir(basedir)
with closing(ZipFile(archivename, "w", ZIP_DEFLATED)) as z:
for root, dirs, files in os.walk(basedir):
#NOTE: ignore empty directories
for fn in files:
absfn = os.path.join(root, fn)
zfn = absfn[len(basedir)+len(os.sep):] #XXX: relative path
z.write(absfn, zfn)
if __name__ == '__main__':
import sys
basedir = sys.argv[1]
archivename = sys.argv[2]
zipdir(basedir, archivename)
例子:
C:\zipdir> python -mzipdir c:\tmp\test test.zip
它創建'C:\zipdir\test.zip'
歸檔與'c:\tmp\test'
目錄的內容。
+0
`ZFN = absfn [長度(BASEDIR)+ LEN (os.sep):]`爲什麼不是`absbasedir = os.path.abspath(basedir); os.path.relpath(absfn,absbasedir)`?另外,basedir和os.sep的長度可以看作是不變的,所以它應該在兩個for循環之外。 – n611x007 2013-08-16 13:11:49
5
這裏是一個遞歸版本
def zipfolder(path, relname, archive):
paths = os.listdir(path)
for p in paths:
p1 = os.path.join(path, p)
p2 = os.path.join(relname, p)
if os.path.isdir(p1):
zipfolder(p1, p2, archive)
else:
archive.write(p1, p2)
def create_zip(path, relname, archname):
archive = zipfile.ZipFile(archname, "w", zipfile.ZIP_DEFLATED)
if os.path.isdir(path):
zipfolder(path, relname, archive)
else:
archive.write(path, relname)
archive.close()
42
在Python 2.7上,您可以使用:shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])。
BASE_NAME壓縮文件名擴展零下
格式的檔案
ROOT_DIR目錄壓縮的格式。
例如
shutil.make_archive(target_file, format="bztar", root_dir=compress_me)
相關問題
- 1. 如何使用commnad行參數壓縮文件夾的內容?
- 2. 如何使用Python解壓縮zip文件內容(使用壓縮格式)
- 3. 如何使用brotli命令行(版本0.5.2)壓縮文件夾?
- 4. 如何只壓縮文件夾內的文件而不壓縮子文件夾?
- 5. 如何在C#中壓縮文件夾內容,即使文件正在使用
- 6. 如何使用ZipKit壓縮文件夾?
- 7. 如何使用PowerShell壓縮文件夾
- 8. 如何枚舉Java中的壓縮文件夾的內容?
- 9. 使用php腳本的壓縮/壓縮文件夾
- 10. 使用Powershell腳本壓縮文件夾
- 11. 如何使用rubyzip解壓縮壓縮文件夾
- 12. 如何查看壓縮文件內容
- 13. 使用zlib版本1.1.3解壓縮內存中的gzip文件
- 14. 如何使用python壓縮Excel文件?
- 15. 壓縮文件夾中的所有內容排除大文件
- 16. 如何在Python中重命名壓縮文件的內容?
- 17. 如何在Python中讀取.gz壓縮文件的內容?
- 18. 如何使用Python GZip模塊壓縮文件夾?
- 19. 使用qt壓縮文件夾/文件
- 20. 如何使用rubyzip庫獲取壓縮文件的內容?
- 21. 如何將未壓縮文件夾視爲壓縮文件?
- 22. Plone軟件包下載或壓縮文件夾的內容
- 23. 如何優雅地比較zip文件夾內容和解壓縮文件夾內容
- 24. 如何閱讀Python中壓縮文件夾中的文本文件
- 25. 如何使用VBScript將文件夾的每個子文件夾壓縮爲ZIP壓縮文件?
- 26. 如何使用ZF2過濾器壓縮文件內容?
- 27. 如何讓我的Python(版本2.5)腳本在文件夾內而不是從命令行運行jar文件?
- 28. 使用Python將文件解壓縮到一個文件夾
- 29. 添加現有的文件夾的內容壓縮PHP
- 30. 壓縮文件夾的內容php,而不是整個文件夾
答案,對於現代的Python,是在[此處](http://stackoverflow.com/q/1855095/541136) – 2017-03-14 19:08:00