2014-08-28 5 views
10

Ich möchte ein Skript schreiben, um alle '.py' Dateien in eine Zip-Datei hinzuzufügen. HierVerwenden von Python zum Hinzufügen einer Liste von Dateien in eine Zip-Datei

ist, was ich habe:

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) 

Allerdings gibt es einen Fehler:

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__' 

so scheint die Datei Taufnamen nicht korrekt ist.

+0

welche Linie? Zeige die volle Spur – WeaselFox

+0

Ach, Herr Pieters, wie geht es Ihnen? es ist der eigentliche Name. Ich habe versucht, es in "testing.zip" zu ändern, und es funktioniert auch nicht. –

+0

@MarkK: Ja, das habe ich schon in der Zwischenzeit abgeschätzt, tut mir leid, dass ich danach gefragt habe, ohne zu überprüfen, was 'arcname' in der Quelle ist. Ich habe das Problem bereits gefunden, siehe meine Antwort. –

Antwort

12

Sie müssen in dem Kompressionstyp als Schlüsselwort-Argument zu übergeben:

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

Ohne das Schlüsselwort-Argument werden Sie ZipFile.write() eine ganze Zahl arcname Argumente statt zu geben, und das verursacht den Fehler, den Sie als arcname sieht wird normalisiert.

5

nach der Anleitung oben, die letzte ist: (nur sie zusammen bei setzt es sinnvoll sein könnte)

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)