2014-08-28 14 views
10

Chcę napisać skrypt, aby dodać wszystkie pliki ".py" do pliku zip.Używanie Pythona do dodawania listy plików do pliku zip

Oto co mam:

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) 

jednak daje błąd:

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

więc wydaje się, że podane nazwy plików nie jest poprawna.

+0

co wiersza? pokaż pełny ślad – WeaselFox

+0

ah, Panie Pieters, jak się masz? to jest prawdziwe imię. Próbowałem zmienić go na "testing.zip", nie działając. –

+0

@MarkK: Tak, już to zdyskredytowałem, przepraszam za pytanie o to bez sprawdzenia, co to jest 'arcname' w źródle. Znalazłem problem już, zobacz moją odpowiedź. –

Odpowiedz

12

Trzeba zdać w rodzaju kompresji jako argumentu słowa kluczowego:

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

Bez argumentu słowa kluczowego, dajesz ZipFile.write() liczbę całkowitą arcname argumentem zamiast, i to jest przyczyną błędu widoczny jako arcname jest znormalizowany.

5

według wskazówek powyżej, ostateczna jest: (tylko zestawiając je w przypadku mogłoby to być przydatne)

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) 
Powiązane problemy