簡體   English   中英

使用 Python 將文件列表添加到 zip 文件中

[英]Using Python to add a list of files into a zip file

我想編寫一個腳本來將所有 '.py' 文件添加到一個 zip 文件中。

這是我所擁有的:

import zipfile
import os

working_folder = 'C:\\Python27\\'

files = os.listdir(working_folder)

files_py = []

for f in files:
    if f[-2:] == 'py':
        fff = working_folder + f
        files_py.append(fff)

ZipFile = zipfile.ZipFile("zip testing.zip", "w" )

for a in files_py:
    ZipFile.write(a, zipfile.ZIP_DEFLATED)

但是它給出了一個錯誤:

Traceback (most recent call last):
  File "C:\Python27\working.py", line 19, in <module>
    ZipFile.write(str(a), zipfile.ZIP_DEFLATED)
  File "C:\Python27\lib\zipfile.py", line 1121, in write
    arcname = os.path.normpath(os.path.splitdrive(arcname)[1])
  File "C:\Python27\lib\ntpath.py", line 125, in splitdrive
    if p[1:2] == ':':
TypeError: 'int' object has no attribute '__getitem__'

所以似乎給出的文件名不正確。

您需要將壓縮類型作為關鍵字參數傳入:

ZipFile.write(a, compress_type=zipfile.ZIP_DEFLATED)

如果沒有關鍵字參數,您ZipFile.write()一個整數arcname參數,這會導致您看到的錯誤,因為arcname正在被規范化。

原回答 2014 年 9 月 2 日 3:52

根據上面的指導,最終是:(只是將它們放在一起以防萬一)

import zipfile
import os

working_folder = 'C:\\Python27\\'

files = os.listdir(working_folder)

files_py = []

for f in files:
    if f.endswith('py'):
        fff = os.path.join(working_folder, f)
        files_py.append(fff)

ZipFile = zipfile.ZipFile("zip testing3.zip", "w" )

for a in files_py:
    ZipFile.write(os.path.basename(a), compress_type=zipfile.ZIP_DEFLATED)
ZipFile.close()

於 2020 年 3 月由 @jinzy 在zip file and avoid directory structure啟發下添加,上面的最后一行更改為下面以避免 zip 文件中的文件結構。

ZipFile.write(a, "C:\\" + os.path.basename(a), compress_type=zipfile.ZIP_DEFLATED)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM