Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 ZIPFILE 모듈로 파일을 압축하는 방법.

<시간/>

문제

파이썬에서 압축 파일을 만들고 싶습니다.

소개

ZIP 파일은 다른 많은 파일의 압축된 내용을 담을 수 있습니다. 파일을 압축하면 디스크 크기가 줄어들어 인터넷을 통해 또는 Control-m AFT 또는 Connect direct 또는 scp를 사용하여 시스템 간에 파일을 전송할 때 유용합니다.

Python 프로그램은 zipfile 모듈의 함수를 사용하여 ZIP 파일을 생성합니다.

방법...

1. 우리는 zipfile과 io 패키지를 사용할 것입니다. 시스템에 패키지가 누락된 경우 pip를 사용하여 설치합니다. 확실하지 않은 경우 pip freeze 명령을 사용하여 패키지를 확인하십시오.

2. 샘플 데이터를 파일에 쓰는 함수를 작성합니다. 아래의 write_data_to_files 함수는 데이터를 입력받아 현재 디렉토리 이름에 파일을 생성합니다.

# 기능 :write_data_to_filesdef write_data_to_files(inp_data, file_name):"""function :이 codeargs :inp_data :대상에 쓸 데이터 file_name :데이터를 저장할 대상 파일 이름return :noneassumption :생성할 파일과 이 코드는 같은 디렉토리에 있습니다."""print(f" *** 데이터 쓰기 - {file_name}")throwaway_storage =io.StringIO(inp_data)with open(file_name, 'w' ) as f:for line in throwaway_storage:f.write(line)

3. 이제 위의 단계에서 만든 파일을 압축하는 file_compress 함수를 작성합니다. 이 기능은 파일 목록을 수락하고 파일을 살펴보고 zip 파일로 압축합니다. 각 단계에 대한 자세한 설명은 댓글로 제공됩니다.

압축된 ZIP 파일을 직접 생성하려면 'w'를 두 번째 인수로 전달하여 쓰기 모드에서 ZipFile 개체를 열어야 합니다.

ZipFile 객체의 write() 메서드에 경로를 전달하면 Python은 해당 경로의 파일을 압축하여 ZIP 파일에 추가합니다.

write() 메서드의 첫 번째 인수는 추가할 파일 이름의 문자열입니다.

두 번째 인수는 압축 유형 매개변수입니다. 이 매개변수는 파일을 압축하는 데 사용해야 하는 알고리즘을 컴퓨터에 알려줍니다.

예시

# 기능 :file_compressdef file_compress(inp_file_names, out_zip_file):"""기능 :file_compressargs :inp_file_names :압축할 파일 이름 목록_zip_file :출력 zip filereturn :noneassumption :입력 파일 경로와 이 코드는 같은 디렉토리에 있습니다.""" # 압축을 위해 압축 모드 ZIP_DEFLATED를 선택하거나 파일을 저장하려면 zipfile.ZIP_STORED를 선택하십시오.compression =zipfile.ZIP_DEFLATEDprint(f" *** 압축을 위해 전달된 파일 이름 입력 - {inp_file_names}")# zip 파일 생성 첫 번째 매개변수 경로/이름 , 두 번째 modeprint(f' *** out_zip_file is - {out_zip_file}')zf =zipfile.ZipFile(out_zip_file, mode="w")try:for file_to_write in inp_file_names:# zip 파일에 파일 추가# 첫 번째 매개변수 파일에 zip, zipprint의 두 번째 파일 이름(f' *** 처리 파일 {file_to_write}')zf.write(file_to_write, file_to_write, compress_type=compression)예외 e:print(f'로 FileNotFoundError 예외) *** zip 프로세스 중 예외가 발생했습니다. - { e}')finally:# 파일을 닫는 것을 잊지 마세요!zf.close()

4. 함수를 호출하여 두 개의 csv 파일을 만든 다음 압축합니다. 하나의 파일에 1개 이상의 그랜드슬램 타이틀을 획득한 테니스 선수 데이터(temporary_file1_for_zip.csv 및 1개 이하의 그랜드슬램 우승자 테니스 선수)를 다른 파일 Temporary_file1_for_zip.csv에 사용합니다. 그런 다음 이 두 파일을 모두 임시.zip 파일로 압축합니다.

예시

zipfileimport ioimport 판다를 pdfile_name1 ="temporary_file1_for_zip.csv"file_name2 ="temporary_file2_for_zip.csv"file_name_list =[file_name1, file_name2]zip_file_name ="temporary.zip# 파일 1 1file에 대한 데이터 플레이어"로 가져오기 ,20Djokovic,17Murray,3"""# 파일 2file_data_2의 데이터 ="""player,titlesTheim,1Zverev,0Medvedev,0Rublev,0"""# file_data를 file_namewrite_data_to_files(file_data_1, file_name1)write_data_to_file에 씁니다. file_name을 zip_file_namefile_compress(file_name_list, zip_file_name)
로 압축

예시

5. 위의 단계에서 논의한 모든 것을 통합합니다.

# 데이터 정의# 단일 파일로 zip 파일을 생성합니다.import zipfileimport ioimport pandas as pd# 함수:write_data_to_filesdef write_data_to_files(inp_data, file_name):"""function:이 codeargs에 전달된 데이터로 csv 파일 생성 :inp_data :대상에 쓸 데이터 file_name :데이터를 저장할 대상 파일명return :noneassumption :생성할 파일과 이 코드가 같은 디렉토리에 있습니다."""print(f" *** 데이터를 - { file_name}")throwaway_storage =io.StringIO(inp_data) with open(file_name, 'w') as f:for line in throwaway_storage:f.write(line)# 기능:file_compressdef file_compress(inp_file_names, out_zip_file):"""function :file_compressargs :inp_file_names :압축할 파일 이름 목록 out_zip_file :출력 zip filereturn :noneassumption :입력 파일 경로와 이 코드는 같은 디렉토리에 있습니다.""# 압축을 위해 압축 모드 ZIP_DEFLATED를 선택하거나 파일 압축을 저장하려면 zipfile.ZIP_STORED를 선택하십시오. =zipfile.ZIP_DEFLA TEDprint(f" *** 압축을 위해 전달된 입력 파일 이름 - {inp_file_names}")# zip 파일 생성 첫 번째 매개변수 경로/이름, 두 번째 모드print(f' *** out_zip_file is - {out_zip_file}')zf =zipfile. ZipFile(out_zip_file, mode="w")try:for file_to_write in inp_file_names:# zip 파일에 파일 추가# 첫 번째 매개변수 파일을 zip으로, 두 번째 파일 이름을 zipprint(f' *** 처리 파일 {file_to_write}')zf. write(file_to_write, file_to_write, compress_type=compression)except FileNotFoundError as e:print(f' *** zip 프로세스 중 예외 발생 - {e}')finally:# 파일을 닫는 것을 잊지 마세요!zf.close() # __main__ programif __name__ =='__main__':# 파일 이름 및 datafile_name1 ="temporary_file1_for_zip.csv"file_name2 ="temporary_file2_for_zip.csv"file_name_list =[file_name1, file_name2]zip_file_name ="dataplayer_1 =" ,titlesFederer,20Nadal,20Djokovic,17Murray,3"""file_data_2 ="""player,titlesTheim,1Zverev,0Medvedev,0Rublev,0"""# file_data를 file_namewrite_d에 씁니다. ata_to_files(file_data_1, file_name1)write_data_to_files(file_data_2, file_name2)# file_name을 zip_file_namefile_compress(file_name_list, zip_file_name)
로 압축
*** 데이터 쓰기 - 임시 파일1_for_zip.csv*** 데이터 쓰기 - 임시 파일2_for_zip.csv*** 압축을 위해 전달된 파일 이름 - ['temporary_file1_for_zip.csv', 'temporary_file2_for_zip.csv']** * out_zip_file은 - 임시.zip*** 처리 파일 임시_file1_for_zip.csv*** 처리 파일 임시_file2_for_zip.csv

출력

위의 코드가 실행되면 출력은

  • 현재 디렉토리에 임시_파일1_for_zip.csv가 생성되었습니다.

  • 임시_file2_for_zip.csv가 현재 디렉토리에 생성되었습니다.

  • 임시.zip 파일이 현재 디렉토리에 생성됩니다.