2017-05-09 3 views
0

私は個々の.zipファイルに圧縮したい(* .pagesという名前の)一連のフォルダを持っています。 "example1.pages"を "example1.pages.zip"に、 "example2.pages"を "example2.pages.zip"に追加します。また、個々の.pagesフォルダの内容も含めたいと思います。複数のフォルダを個々の.zipファイルとして再帰的に圧縮する方法はありますか?

現在、スクリプトはすべての.pagesファイルを、ネストされたディレクトリを持つ1つのファイルに圧縮します。

私はzipfile機能を実行するときに何かが行方不明になっていると思います。

ご協力いただければ幸いです。

import os 
import zipfile 

start_path = "MY/DIRECTORY/HERE" 

def zipdir(ziph): 
    dir_count = 0 
    file_count = 0 
    for (path,dirs,files) in os.walk(start_path): 
     print('Directory: {:s}'.format(path)) 
     dir_count += 1 

     for file in dirs: 
      if file.endswith(".pages"): 
       print('\nAttempting to zip: \'{}\''.format(file)) 

       ziph.write(os.path.join(path, file)) 

       print('Done') 
       file_count += 1 

    print('\nProcessed {} files in {} directories.'.format(file_count,dir_count))  



if __name__ == '__main__': 
    zipf = zipfile.ZipFile("NAME/OF/INDIVIDUAL/ZIP/FILE.zip", 'w', zipfile.ZIP_DEFLATED) 
    zipdir(zipf) 
    zipf.close() 
+3

ファイルを操作したい場合、なぜディレクトリを反復処理していますか? – pvg

+1

複数のZIPファイルが必要な場合は...ループ内に作成します。 – tdelaney

+0

@pvg ".pages"という名前のフォルダで操作したい – WhoTheDevil

答えて

0

あなたは1つのzipファイルを開いてそこにすべてを追加します。ファイルごとに1つのzipが必要な場合は、ファイルをスキャンするときにループ内にzipファイルを作成する必要があります。

import os 
import zipfile 

start_path = "MY/DIRECTORY/HERE" 
start_path = '.' 

def zipdir(start_path): 
    dir_count = 0 
    file_count = 0 
    for (path,dirs,files) in os.walk(start_path): 
     print('Directory: {:s}'.format(path)) 
     dir_count += 1 
     for file in files: 
      if file.endswith(".pages"): 
       file_path = os.path.join(path, file) 
       print('\nAttempting to zip: \'{}\''.format(file_path)) 
       with zipfile.ZipFile(file_path + '.zip', 'w', zipfile.ZIP_DEFLATED) as ziph: 
        ziph.write(file_path, file) 
       print('Done') 
       file_count += 1 

    print('\nProcessed {} files in {} directories.'.format(file_count,dir_count)) 

if __name__ == '__main__': 
    zipdir(start_path) 
関連する問題