2017-03-03 8 views
1

ディレクトリdirには、f1.txt,f2.txtf3.pngtの3つのファイルがあります。ディレクトリ内のすべてのファイルをアーカイブする(Python)

は私が各ファイルはzipアーカイブなり、そのディレクトリのパスを指定したzipアーカイブを作成したいです。結果のzipped_archive.zipは、dirと同じパスにある必要があります。ある

は、私はこれらのf#.zipの各ファイルは、相応名前のtxtまたはpngファイルが含まれているところzipped_archive.zipf1.zipf2.zipf3.zip含まれるようにします。

上記よりよいこのファイル構造で示されている:this answershutilに見られるようthis answer見られるように

tmp 
| 
+-- dir 
| | 
| +-- f1.txt 
| +-- f2.txt 
| +-- f3.txt 
| 
+-- zipped_archive.zip 
|   | 
|   +-- f1.zip 
|   |  | 
|   |  +-- f1.txt 
|   +-- f2.zip 
|   |  | 
|   |  +-- f2.txt 
|   +-- f3.zip 
|   |  | 
|   |  +-- f3.png 

私は同じ質問の両方から、zipfileを適用しようとしています。私は各ファイルにshutil.make_archiveを使用していますが、最終的にはziph.writeを実行しますが、私はそれを動作させるのに苦労し、混乱しました。

誰かがこのコードの動作を理解するのに役立つサンプルコードを提案/提供できますか?

+1

既にお試しいただいたコードをご提供いただければ、問題を検討する方がはるかに簡単です。 –

+0

@SangbokLee Trueしかし、私が記述した2つの答えのコードを組み合わせようとしただけで、行動や結果が役に立たない(私は思う)ため、私はそれを選んでいませんでした。 –

+0

@ nk-ffordあなたが試したコードと、それが予想外の振る舞い(例外が発生した場合の完全なスタックトレースを含む)の具体的な記述を提供することは、今でも良い習慣です。それ以外の場合は、コードを要求しているだけで、それは実際にはStackOverflowの目的ではありません。 – glibdud

答えて

1

これを試してください。

import os 
import zipfile 

target = "dir" 
os.chdir(target) # change directory to target 
files = os.listdir('.') # get all filenames into a list 

zipfiles = [] # a list which will be used later for containing zip files 
for i in range(len(files)): 
    fn = files[i].split('.')[0] + '.zip' # f#.??? -> f#.zip 
    zipf = zipfile.ZipFile(fn, 'w', zipfile.ZIP_DEFLATED) 
    zipf.write(files[i]) 
    zipf.close() 
    zipfiles.append(fn) # put f#.zip into the list for later use 

zipf = zipfile.ZipFile('../zipped_archive.zip', 'w', zipfile.ZIP_DEFLATED) 
for i in range(len(zipfiles)): 
    zipf.write(zipfiles[i]) 
    os.remove(zipfiles[i]) # delete f#.zip after archiving 

zipf.close() 
os.chdir('..') # change directory to target's parent 
+0

素晴らしい、ありがとう!あなたのソリューションに簡単に従うことができるように、簡単な説明(またはコメント)を追加してください。 –

+0

私はいくつかのコメントを追加しました。それでも理解できない場合は、一度に1行実行して、その結果をPythonコンソールに出力してください。 –

+0

10行目について混乱しています。なぜ、各ファイルの末尾に '.zip'というサフィックスを名前変更/追加しますか?圧縮を行う次の 'ZipFile'コマンドがそのサフィックスを実際に追加してはいけませんか? –

関連する問題