這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何用Python寫一個帶圖形界面的文件壓縮軟件,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、四川網(wǎng)站維護(hù)、網(wǎng)站推廣。
文件壓縮和解壓我們在日常工作學(xué)習(xí)中會經(jīng)常用到,比如winrar、快壓、好壓等壓縮軟件
打開之后的界面長這個樣子:
壓縮完成后是這個樣子:
解壓完成后是這個樣子:
首先不像商業(yè)壓縮軟件,我把功能簡化了很多,只實現(xiàn)主要的壓縮(壓縮文件和文件夾)和解壓功能。
Python有一些第三方壓縮和解壓的庫,我選用了zipfile,把文件壓縮為.zip,圖形化選用了pyqt5,因為之前翻譯軟件實現(xiàn)過圖形化,所以就偷懶拿過來改一下用。
程序的運行流程是(對照上面的圖看):
首先在下拉框選擇是“壓縮”還是“解壓”,然后點擊“選擇“按鈕選擇要執(zhí)行的文件,選擇完成后點擊右下角的“開始”按鈕,軟件就開始執(zhí)行了。
整個過程比較簡單,主要兩個地方卡殼了一下,耗了點時間去解決。
Python壓縮程序第一個卡殼地方是:
因為要實現(xiàn)壓縮文件和文件夾的功能,所以當(dāng)點擊圖形界面的”選擇“按鈕時要支持既能選擇文件,又能選擇文件夾。
但是Qt的QFileDialog不支持這樣的實現(xiàn),提供的控件要么只能選文件,要么只能選文件夾,對此花了好幾個小時去研究和查閱資料,得出的結(jié)論是要繼承QFileDialog類,然后重寫這個類的部分方法來,實現(xiàn)既能選文件又能選文件夾的功能,于是趟坑去實現(xiàn)了一把,對Qt本身的機(jī)制也是一知半解,所以調(diào)試了很久。
重新實現(xiàn)的QFileDialog類代碼如下:
class FileDialog(QtWidgets.QFileDialog): def __init__(self, *args, **kwargs): super(FileDialog, self).__init__(*args, **kwargs) self.setOption(QtWidgets.QFileDialog.DontUseNativeDialog, True) self.setFileMode(QtWidgets.QFileDialog.ExistingFiles) self.tree = self.findChild(QtWidgets.QTreeView) self._selFile = '' def accept(self): inds = self.tree.selectionModel().selectedIndexes() self._selFile = os.path.join(str(self.directory().absolutePath()),str(inds[0].data())) print('_selfile:',self._selFile) self.hide() def selectedFiles(self): return self._selFile
第二個Pyhthon壓縮程序卡殼的地方是:
我把整個程序都寫完了,測試了幾把沒有問題,自己沾沾自喜這個程序真完美。第二天又想起了,想再完整的測試一下,畢竟要寫在猿人學(xué)公眾號上,被人挑刺心里總是不好受的。結(jié)果發(fā)現(xiàn)壓縮時會把你的整個文件路徑上的文件夾都壓縮進(jìn)去。
舉個栗子:
比如要壓縮的文件路徑是:D:/log/nginx/access.log
壓縮是:D:/log/nginx/access.zip
解壓后,正常情況應(yīng)該是把文件還原為:
D:/log/nginx/access/access.log
但是實際上解壓后變成了:
D:/log/nginx/access/log/nginx/access.log
就是程序在壓縮的時候把文件路徑上的目錄也都壓縮進(jìn)去了。
這也調(diào)試了好一會,開始以為是把文件路徑給傳錯了。
結(jié)果是自己對zipfile的使用沒研究清楚,錯誤示例如下:
z = zipfile.Zipfile('D:/log/nginx/access.zip') z.write('D:/log/nginx/access.log') z.close()
這樣就會把文件路徑上的目錄全都壓縮進(jìn)去。正確的用法是:
z = zipfile.Zipfile('D:/log/nginx/access.zip') z.write('D:/log/nginx/access.log','access.log') z.close()
為什么頭一天測試沒有發(fā)現(xiàn)這個問題呢?
因為我之前測試要壓縮的文件路徑是這樣的:D:/access.log
文件在根目錄下面,文件路徑上沒有其他目錄了,所以就發(fā)現(xiàn)不了。
這也告訴我們測試一定要多角度,多場景測試啊。
兩個Python源文件,200多行代碼搞定,再一次感嘆用Python就是方便。
一樣可以使用pyinstaller把程序打包成exe文件,就可以把exe文件發(fā)給其他朋友使用了,他們的電腦沒有Python開發(fā)環(huán)境也能運行此程序,當(dāng)然為了程序穩(wěn)定,你最好多在幾臺電腦上測試一下。
打包命令:
pyinstaller -F -w -i icon.ico transdocx.py
一個zip_main.py文件(圖形界面),一個zip_console.py文件(壓縮功能),開發(fā)圖形界面程序通常是這樣,把圖形界面部分和業(yè)務(wù)功能部分要分離,相互不干擾,也方便以后修改。
程序運行方法:python zip_main.py
1.這個程序只能壓縮和解壓zip文件,不支持rar、tar。
2.沒有嚴(yán)格的容錯處理
3.不支持加密壓縮和解壓
上述就是小編為大家分享的如何用Python寫一個帶圖形界面的文件壓縮軟件了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站欄目:如何用Python寫一個帶圖形界面的文件壓縮軟件
文章源于:http://jinyejixie.com/article44/pgejhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)頁設(shè)計公司、商城網(wǎng)站、云服務(wù)器、搜索引擎優(yōu)化、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)