2017-03-03 2 views
1

에는 f1.txt, f2.txt, f3.pngt의 세 파일이 들어 있습니다.먼저 모든 개별 파일을 보관하여 디렉토리의 아카이브를 만듭니다 (파이썬)

나는 각 파일이 압축 아카이브 될 것이다 디렉토리의 경로를 주어진 우편 아카이브을 만들려고합니다. 결과적으로 zipped_archive.zipdir과 동일한 경로에 있어야합니다. 이다

, 나는이 f#.zip 각 파일은 상응 명 txt 또는 png 파일이 포함 된 곳 zipped_archive.zipf1.zip, f2.zip, f3.zip 포함합니다. 같은 질문에서 모두

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

내가 볼 this answerthis answer에서 볼 수 있듯이 zipfileshutil을 적용하는 것을 시도했다 :

위의 더 나은이 파일 구조로 설명된다. 나는 각각의 파일에 shutil.make_archive을 사용했지만 그 결과로 ziph.write을 수행하지만, 나는 그 파일을 작동시키고 혼란스럽게 만들려고 애쓴다.

누군가가 어떻게 작동하는지 이해할 수 있도록 몇 가지 예제 코드를 제안하거나 제공 할 수 있습니까?

+1

이미 시도한 코드를 제공하면 문제를 훨씬 쉽게 검사 할 수 있습니다. –

+0

@SangbokLee True 그러나 나는 단지 내가 설명한대로 정확하게 언급 한 두 가지 답변의 코드를 결합하려고했기 때문에 그렇게 선택하지 않았고 행동/결과가 도움이되지 않습니다 (제 생각에는). –

+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

그래, 내가 몇 가지 덧글을 추가했습니다. 여전히 이해하기 어려우면 한 번에 한 줄만 실행하고 그 결과를 파이썬 콘솔에 출력하십시오. –

+0

10 번째 라인에 대해 혼란스러워 : 왜 각 파일 끝에'.zip' 접미사의 이름을 바꾸거나 추가합니까? 압축을 수행하는 다음'ZipFile' 명령이 실제로 그 접미사를 추가하지 않아야합니까? –

관련 문제