2016-10-20 5 views
0

Python docs에서 follwing 스 니펫을 선택하여 하나의 파일을 압축합니다 (플라스크 프로젝트의 경우).Zip에있는 모든 폴더가 포함 된 Zip 파일 만들기

는 여기 temploc에서 zip 파일을 만들 수 있습니다 /home/workspace/project/temploc/zipfile.zip

을 그리고 여기에 압축 할 내 파일입니다 /home/workspace/project/temploc/file_to_be_zipped.csv

from zipfile import ZipFile 
def zip_file(self, output, file_to_zip): 
    try: 
     with ZipFile(output, 'w') as myzip: 
     myzip.write(file_to_zip) 
    except: 
     return None 
    return output 

temploc에 있지만 전체와 zip 파일을 만들어이 코드 zip 파일 경로의 디렉토리 구조.

def prepare_zip(self): 
     cache_dir = app.config["CACHE_DIR"] #-- /home/workspace/project/temploc 
     zip_file_path = os.path.join(cache_dir, "zipfile.zip") 
     input_file = '/home/workspace/project/temploc/file_to_be_zipped.csv' 
     self.zip_file(zip_file_path, input_file) 

그러나 위의 코드

는 주어진 경로의 디렉토리 구조와 zip 파일 만드는 :

zipfile.zip  
├──home 
│   ├── workspace 
│   │   └── project 
│   │    └──temploc 
│   │     └── file_to_be_zipped.csv 

을하지만은이 구조를 원하는 :

zipfile.zip  
    └── file_to_be_zipped.csv 

을 나는 '무엇을받지 못했습니다 실종.

답변

1

당신은 아카이브 파일의 적절한 이름을 설정 ZipFile.writesecond argument를 사용 shuld : 그것은 마법처럼 일했다

import os.path 

... 

myzip.write(file_to_zip, os.path.basename(file_to_zip)) 
+0

. 대답을 수락하는 것을 잊었습니다. 감사합니다. :) – Laxmikant