ㅁ 개요
O 프로그램 소개
- 이번 글은 이전글(파이썬 GUI 파일압축 및 해제 프로그램 만들기 - 2. 파일 압축하기)에 이은 3번째 글로 파일 압축을 푸는 방법에 대하여 알아보겠습니다.
O 완성된 프로그램 실행 화면
1. 프로그램 실행 후
2.압축해제를 위해 이미 압축되어 있는 파일을 선택하여 불러옵니다.(아래에서는 '12.zip' 파일 선택)
3. 그리고 나서 '압축 풀기' 버튼을 클릭하면 '실행 결과' 화면에 압축해제 결과를 보여주고, 실제 폴더 확인 시 '1.txt'와 '2.txt' 파일 2개로 압축이 정상적으로 해제된 것을 볼 수 있습니다.
ㅁ 세부 내용
O 완성된 소스
소스 : 2.py( 파일압축 해제하기)
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5 import uic, QtWidgets
import os
from PyQt5.QtGui import *
import zipfile
form_class = uic.loadUiType("compressUncompress.ui")[0]
class MyWindow(QMainWindow, form_class):
def __init__(self):
super().__init__()
self.setFixedSize(800,600)
self.setWindowIcon(QIcon("pagichacha.png"))
self.setupUi(self)
self.pushButton.clicked.connect(self.startCompress)
self.toolButton.clicked.connect(self.selectFiles)
self.pushButton_3.clicked.connect(self.startUncompress)
self.toolButton_3.clicked.connect(self.selectFile)
def startUncompress(self):
dir = os.path.dirname(file[0])
os.chdir(dir)
if self.lineEdit_4.text():
uncomFileName = self.lineEdit_4.text()
try:
pass
with zipfile.ZipFile(uncomFileName, 'r') as existing_zip:
existing_zip.extractall('.')
self.textEdit.setText("선택하신 압축 파일 ("+str(uncomFileName)+") 이 정상적으로 해당 폴더 (현재폴더) 에 압축 해제 되었습니다.")
except:
pass
self.textEdit.setText("압축 해제과정에서 에러가 발생하였습니다.")
else:
self.textEdit.setText("압축 해제할 파일을 선택하지 않았습니다.")
def startCompress(self):
if len(files[0]) == 1:
files2 = files[0][0]
file = os.path.basename(files2)
dir = os.path.dirname(files2)
os.chdir(dir)
if self.lineEdit.text() and self.lineEdit_2.text():
comFileName = self.lineEdit.text()
try:
pass
new_zip = zipfile.ZipFile(comFileName, 'w')
new_zip.write(file, compress_type=zipfile.ZIP_DEFLATED)
self.textEdit.setText("선택하신 파일 ("+file+") 이 정상적으로 해당 폴더 ("+dir+") 에 압축("+comFileName+")되었습니다.")
new_zip.close()
except:
pass
self.textEdit.setText("압축 실행과정에서 에러가 발생하였습니다.")
else:
self.textEdit.setText("압축할 파일을 선택하지 않았거나, 압축할 파일명을 입력하지 않았습니다.")
else:
myfiles = []
for file in files[0]:
myfiles.append(os.path.basename(file))
files2 = files[0][0]
dir = os.path.dirname(files2)
os.chdir(dir)
if self.lineEdit.text() and self.lineEdit_2.text():
comFileName = self.lineEdit.text()
try:
with zipfile.ZipFile(comFileName, 'w') as my_zip:
for file in myfiles:
my_zip.write(file)
my_zip.close()
self.textEdit.setText("선택하신 파일 ("+str(myfiles)+") 이 정상적으로 해당 폴더 ("+dir+") 에 압축("+comFileName+")되었습니다.")
except:
self.textEdit.setText("압축 실행과정에서 에러가 발생하였습니다.")
else:
self.textEdit.setText("압축할 파일을 선택하지 않았거나, 압축할 파일명을 입력하지 않았습니다.")
def selectFiles(self):
global files
files = QtWidgets.QFileDialog.getOpenFileNames()
self.lineEdit_2.setText('{}'.format(files[0]))
def selectFile(self):
global file
file = QtWidgets.QFileDialog.getOpenFileName()
self.lineEdit_4.setText('{}'.format(file[0]))
app=QApplication(sys.argv)
window = MyWindow()
window.show()
app.exec_()
O 소스 다운로드 및 실행
O 주요 내용
1. 초기화 함수 아래에 아래 2줄을 추가하였습니다.
pushButton_3 클릭시 startUncompress함수가, toolButton_3 클릭시 selectFile함수가 실행되도록 하고 있습니다.
self.pushButton_3.clicked.connect(self.startUncompress)
self.toolButton_3.clicked.connect(self.selectFile)
2. 압축 해제시는 여러파일을 선택할 필요가 없으므로 아래와 같이 getOpenFileName()함수를 사용하여 파일을 선택해 줍니다.
file = QtWidgets.QFileDialog.getOpenFileName()
3. 압축 해제시 코드도 압축시 코드와 유사하며, 주요하게 다른 점은 다음과 같습니다.
with zipfile.ZipFile(uncomFileName, 'r') as existing_zip: # 압축해제할 파일을 읽기모드('r')로 열어서
existing_zip.extractall('.') # 현재 디렉토리에 모두 압축을 해제 합니다.
ㅁ 정리
O 우리가 배운 내용
existing_zip.extractall('.')
이것으로, '파이썬 GUI 파일압축 및 해제 프로그램 만들기'를 마칩니다.
긴글 읽어주셔서 감사하고, 댓글과 하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.
감사합니다.
※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.
'파이썬 실습 > GUI 파일압축 및 해제 프로그램 만들기' 카테고리의 다른 글
파이썬 GUI 파일압축 및 해제 프로그램 만들기 - 2. 파일 압축하기 (6) | 2023.02.13 |
---|---|
파이썬 GUI 파일압축 및 해제 프로그램 만들기 - 1. 소개 (0) | 2023.02.13 |