python解壓到指定文件夾_在Python中壓縮和解壓文件

Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。

如果你已經使用計算機一段時間,你可能遇到了.zip擴展名的文件。它們是可以保存許多其他文件,文件夾和子文件夾的壓縮內容的特殊文件。這種類型的文件在使用互聯網傳輸文件時非常有用。Python也可以用來壓縮或解壓文件,你知道嗎?

本教程將教你如何在Python中使用zipfile模塊,同時提取或壓縮單個或多個文件。

壓縮單個文件

這很容易,而且只需很少的代碼。我們先導入zipfile模塊,然后通過指定第二個參數為“w”在寫模式下打開ZipFile對象。第一個參數是文件本身的路徑。代碼如下:

1920f28a76364925ac293fae1749963b.png

請注意,我的所有代碼片段中使用了Windows樣式格式指定路徑;如果您使用的是Linux或Mac,則需要進行相應的更改。

可以指定不同的壓縮方法來壓縮文件。在Python 3.3版本中添加了新的BZIP2和LZMA方法,但有一些工具還不支持這兩種壓縮方法。因此,比較安全的用法是使用DEFLATED方法。你仍然可以嘗試這些方法來查看壓縮文件大小的差異。

壓縮多個文件

這稍微有點復雜,因為你需要遍歷所有文件。下面的代碼展示了如何壓縮指定文件夾下的所有擴展名為pdf的文件:

3549f85277af4c2c987922f0ef2e4661.png

這一次,我們導入了os模塊,并使用它的walk()方法來遍歷所有文件和子文件夾,并且只壓縮pdf文件。你可以使用if語句為每種格式創建不同的歸檔文件。

如果不想保留目錄結構,可以使用以下行將所有文件放在一起:

ab9c9400aa634a95822272289cf56fb1.png

write()方法接受三個參數:第一個參數是我們要壓縮的文件的名稱;第二個參數是可選的,可以為壓縮文件指定不同的文件名;如果未指定任何內容,則使用默認名稱。

提取所有文件

你可以使用extractall()方法將所有文件和文件夾從zip文件解壓縮到當前目錄。你還可以將文件夾名稱傳遞給extractall(),以解壓縮特定目錄中的所有文件和文件夾。如果文件夾不存在,此方法將會自動創建。代碼如下:

b1ad197075f9482fbf2ea0acc79f3c5d.png

如果想提取其中的多個文件,需要提供包含文件名稱的列表。

提取單個文件

和提取多個文件相似。區別是,這次你需要指定文件名和解壓目錄;需要使用extract()方法,而不是extractall()。下面是一個提取單個文件的代碼片段:

883bdbce5bec4982bc8618c361b84845.png

讀取Zip文件

考慮以下場景:你需要查看zip存檔是否包含特定文件。到目前為止,你唯一的選擇是通過解壓所有文件。同樣,你也可能只提取大于特定大小的文件。其實zipfile模塊允許我們查詢存檔的內容,而不必提取它。

使用ZipFile對象的namelist()方法將按名稱返回歸檔的所有成員的列表。要獲取檔案中特定文件的信息,可以使用ZipFile對象的getinfo()方法。這將允許您訪問特定文件的信息,例如文件的壓縮前后的大小或其上次修改時間。

當有很多文件需要處理時,對所有文件逐個調用getinfo()方法可能是一個令人討厭的過程。在這種情況下,可以使用infolist()方法返回包含歸檔中每個成員的ZipInfo對象的列表。列表中這些對象的順序與實際zip文件的順序相同。

您還可以使用read(file)方法從歸檔中直接讀取特定文件的內容,其中file是要讀取的文件的名稱。為此,必須以讀取或追加模式打開歸檔。

要從歸檔中獲取單個文件的壓縮大小,可以使用compress_size屬性。同樣,要知道未壓縮的大小,可以使用file_size屬性。

以下代碼使用剛才討論的屬性和方法來提取大小低于1MB的文件。

bfe763043673453798fa01bfd7418d6c.png

要知道歸檔中特定文件最后修改的時間和日期,可以使用date_time屬性。這將返回一個包含六個值的元組,分別對應年、月、日、日、時、分、秒。年份總是大于或等于1980,時、分、秒是從零計算的。

f89da862264843f796f5baae8c54c1b3.png

有關原始文件大小和壓縮文件大小的信息可以幫助您決定是否值得壓縮文件。我相信它可以用于其他一些場景。

最后的想法

從本教程中能看到,使用zipfile模塊來壓縮文件有很大的靈活性。可以根據類型、名稱或大小將目錄中的不同文件壓縮到不同的歸檔。你還可以決定是否要保留目錄結構。同樣,在提取文件時,您可以根據自己的標準,如大小等,將它們提取到所需的位置。

實際上,通過編寫我自己的代碼來壓縮和提取文件也是非常令人興奮的。我希望你喜歡的教程,如果你有任何問題,請讓我知道的意見。

英文原文:https://code.tutsplus.com/tutorials/compressing-and-extracting-files-in-python--cms-26816

譯者:奇跡

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529106.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android bar布局,Android學習路線(十)如何將Action Bar疊放在你的布局上

默認狀況下,action bar出如今activity窗口的頂部,略微減小了activity布局的總空間。若是你想隱藏或者顯示action bar,在這堂用戶體驗的課程中,你能夠經過調用htmlFigure 1. Gallerys action bar in overlay mode.android為了不在a…

geant4運行例子_Geant4--一次編譯,運行多個Run,極大提升模擬效率

文|梁佐佐應唐光毅博士/后之約,對于Geant4模擬,我們看是否能解決這么一個問題:我現在想模擬探測器不同角度下的響應,每次模擬需要/run/beamOn 100, 可是我真的不想一遍一遍的去http://DetectorConstruction.cc中修改幾…

python3.7基礎教程_關于本教程 |《Python 官方文檔:入門教程 3.7.0》| Python 技術論壇...

本文檔最新版為 3.8,舊版本可能放棄維護,推薦閱讀最新版! Python 入門教程 Python 是一門簡單易學且功能強大的編程語言。它擁有高效的高級數據結構,并能夠用簡單又有效的方式進行面向對象編程。Python 優雅的語法和動態類型&…

android listview countdowntimer,Android-ListView中的CountDownTimer隨機閃爍

我正在使用計時器制作列表視圖,每個計時器都有不同的截止日期,具體取決于數據庫(類似于拍賣)Time now new Time();now.setToNow();now.normalize(true);nowMillis now.toMillis(true);..String endtime a.get(position).get(TAG_ENDTIME);Integer tim…

echart實現3d地圖_3D飛線效果——讓線“飛”起來的秘密

在城市規劃、統計、交通等行業,地圖可視化已成為最直接也最吸引眼球的一種表達方式。例如人群遷徙、人口流動、OD出行、職住分析、客流來源等眾多場景都需要用到飛線效果呈現。2D飛線效果圖隨著可視化技術的進一步發展,傳統的2D飛線效果略顯單調&#xf…

ad域管理與維護_在NAS SMB卷上使用VisualSVN Server維護代碼庫

VisualSVN Server[1] 是 Windows 平臺上流行的 SVN 形式的代碼管理工具。以下我們將介紹把 NAS SMB 卷作為 VisualSVN 代碼庫存儲中心時會遇到的幾個問題以及相應的解決方法。1. 安裝錯誤的解決方法我們以 VisualSVN Server 3.3.1 版本為例,在安裝 VisualSVN Server…

android 開發art,Android應用開發之Android 系統啟動原理(art 虛擬機)

本文將帶你了解Android應用開發之Android 系統啟動原理(art 虛擬機),希望本文對大家學Android有所幫助。Android 系統啟動原理(art 虛擬機)一、虛擬機的啟動Android 是一個 Linux 的虛擬機,當虛擬機啟動的時候,會執行手機根目錄下的 init.r…

電腦文件夾可以分屏的軟件_電腦上什么便簽軟件可以添加音頻?

提及便簽,很多人都會很自然地想到手機便簽。這是因為隨著智能手機和移動互聯網的發展,現在很多手機上都有了系統自帶的便簽app。其實,除了手機便簽外,還有電腦便簽呢!這不,Win7及其以上版本的電腦上還有系統…

jsp form提交到后臺中文亂碼_JSP與servlet之間的數據傳遞

【51】Jsp與Servlet之間的傳值有兩種,一種是Jsp傳值給Sevlet,另一種是Servlet傳值給Jsp;使用request、response對象完成傳值,具體實現如下:Jsp與Servlet之間的傳值有兩種,一種是Jsp傳值給Sevlet&#xff0c…

android jni 中jnienv,android JNI中JNIEnv類型和jobject類型的解釋

JNIEXPORT void JNICALL Java_com_jni_demo_JNIDemo_sayHello (JNIEnv *env, jobject obj){cout<}對於這個方法參數中的JNIEnv* env參數的解釋:JNIEnv類型實際上代表了Java環境&#xff0c;通過這個JNIEnv* 指針&#xff0c;就可以對Java端的代碼進行操作。例如&#xff0c;…

yang模型中rpc_領域驅動模型(DDD)設計講解

一. 什么是領域驅動模型(DDD)&#xff1f;領域驅動模型一種設計思想&#xff0c;我們又稱為DDD設計思想。是一種為了解決傳統設計思想帶來的維護困難&#xff0c;溝通困難和交互困難而產生的一種新的思想。也解決了在部分公司中&#xff0c;一個項目組就是一套服務&#xff0c;…

鴻蒙系統操作界面跟蘋果很像,鴻蒙手機UI界面曝出!圖標擬物化、操作邏輯近似蘋果iOS13...

原標題&#xff1a;鴻蒙手機UI界面曝出&#xff01;圖標擬物化、操作邏輯近似蘋果iOS13?【IT爆料王-原創文章-具備版權效力】就在近日&#xff0c;筆者收到了網友的匿名私信&#xff0c;提供給筆者華為鴻蒙系統的UI界面截圖&#xff0c;以及搭載鴻蒙系統的華為手機的曝光圖片。…

python3中的int類型占64位,有沒有什么辦法來強制Python來使用64位整數的Windows?

I’ve noticed that whenever any integer surpasses 2^31-1 my number heavy code suffers a large slowdown, despite the fact I’m using a 64 bit build of Python on a 64bit version of Windows. This seems to be true on Python 2.7 and Python 3. I’ve read that Wi…

crtsiii型無砟軌道板_無砟軌道裂縫破損怎么修補

隨著高速鐵路、客運專線、城市地鐵的快速發展&#xff0c;無砟軌道軌道板&#xff08;道床板&#xff09;廣泛應用&#xff0c;但施工中和運營期都發現軌道板混凝土存在不同程度的微細裂縫&#xff0c;對無砟軌道造成了一定的病害。高鐵軌道板裂縫是不可避免的。為確保無砟軌道…

c調用python第三方庫_Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞...

在Python語言中&#xff0c;可以使用ctypes模塊調用其它如C語言編寫的動態鏈接庫DLL文件中的函數&#xff0c;在提高軟件運行效率的同時&#xff0c;也可以充分利用目前市面上各種第三方的DLL庫函數&#xff0c;以擴充Python軟件的功能及應用領域&#xff0c;減少重復編寫代碼、…

妲己機器人怎么升級固件_臺灣重金設計的3D妲己,亮瞎了

大家還記得前幾天米醋分享的國內首檔二次元選秀&#xff0c;遭網友瘋狂吐槽&#xff1a;不知道怎么形容的丑&#xff01;當米醋看到了這檔綜藝的宣傳海報時瞬間被這一批選手的顏值所吸引&#xff01;太魔幻了&#xff01;沒成想看到3D人物效果時米醋卻被這盛世丑顏丑到裂開&…

go語言通道插入0_Go語言入門必知教程-通道

Golang提供了一種稱為通道的機制&#xff0c;用于在協程之間共享數據。當函數作為協程執行并發活動時&#xff0c;需要它們共享資源或數據&#xff0c;通道便充當協程之間的管道(管道)&#xff0c;提供一種確保同步交換數據的機制。需要在聲明通道時指定數據類型&#xff0c;可…

aes加密字符串c++_springboot2.2.X手冊:防抓包?快速實現API接口數據加密

溪云閣&#xff1a;專注編程教學&#xff0c;架構&#xff0c;JAVA&#xff0c;Python&#xff0c;微服務&#xff0c;機器學習等&#xff0c;歡迎關注上一篇&#xff1a;springboot2.2.X手冊&#xff1a;redis的7種類型100個方法全解析有沒有遇到這樣子的接口&#xff0c;放到…

鴻蒙系統打造完備終端,搭載鴻蒙系統的手機很快推出,華為生態更加完善

2019年的8月9日&#xff0c;在華為開發者大會上華為向大家正式的發布了一款操作系統——鴻蒙系統。這個系統備受大家的關注&#xff0c;鴻蒙2.0的發布也在時刻期待中。因為在目前的操作系統中&#xff0c;華為的鴻蒙操作系統是僅次于安卓、ios的存在&#xff0c;而今日&#xf…

curl socket 訪問_使用Curl、socket、file_get_contents三種方法POST提交數據 | 學步園

# <?php # /**# * Socket版本# * 使用方法&#xff1a;# * $post_string "appsocket&versionbeta";# * request_by_socket(facebook.cn,/restServer.php,$post_string);# */# function request_by_socket($remote_server,$remote_path,$post_string,$port …