python解压到指定文件夹_在Python中压缩和解压文件
Python部落(python.freelycode.com)組織翻譯,禁止轉(zhuǎn)載,歡迎轉(zhuǎn)發(fā)。
如果你已經(jīng)使用計(jì)算機(jī)一段時(shí)間,你可能遇到了.zip擴(kuò)展名的文件。它們是可以保存許多其他文件,文件夾和子文件夾的壓縮內(nèi)容的特殊文件。這種類(lèi)型的文件在使用互聯(lián)網(wǎng)傳輸文件時(shí)非常有用。Python也可以用來(lái)壓縮或解壓文件,你知道嗎?
本教程將教你如何在Python中使用zipfile模塊,同時(shí)提取或壓縮單個(gè)或多個(gè)文件。
壓縮單個(gè)文件
這很容易,而且只需很少的代碼。我們先導(dǎo)入zipfile模塊,然后通過(guò)指定第二個(gè)參數(shù)為“w”在寫(xiě)模式下打開(kāi)ZipFile對(duì)象。第一個(gè)參數(shù)是文件本身的路徑。代碼如下:
請(qǐng)注意,我的所有代碼片段中使用了Windows樣式格式指定路徑;如果您使用的是Linux或Mac,則需要進(jìn)行相應(yīng)的更改。
可以指定不同的壓縮方法來(lái)壓縮文件。在Python 3.3版本中添加了新的BZIP2和LZMA方法,但有一些工具還不支持這兩種壓縮方法。因此,比較安全的用法是使用DEFLATED方法。你仍然可以嘗試這些方法來(lái)查看壓縮文件大小的差異。
壓縮多個(gè)文件
這稍微有點(diǎn)復(fù)雜,因?yàn)槟阈枰闅v所有文件。下面的代碼展示了如何壓縮指定文件夾下的所有擴(kuò)展名為pdf的文件:
這一次,我們導(dǎo)入了os模塊,并使用它的walk()方法來(lái)遍歷所有文件和子文件夾,并且只壓縮pdf文件。你可以使用if語(yǔ)句為每種格式創(chuàng)建不同的歸檔文件。
如果不想保留目錄結(jié)構(gòu),可以使用以下行將所有文件放在一起:
write()方法接受三個(gè)參數(shù):第一個(gè)參數(shù)是我們要壓縮的文件的名稱(chēng);第二個(gè)參數(shù)是可選的,可以為壓縮文件指定不同的文件名;如果未指定任何內(nèi)容,則使用默認(rèn)名稱(chēng)。
提取所有文件
你可以使用extractall()方法將所有文件和文件夾從zip文件解壓縮到當(dāng)前目錄。你還可以將文件夾名稱(chēng)傳遞給extractall(),以解壓縮特定目錄中的所有文件和文件夾。如果文件夾不存在,此方法將會(huì)自動(dòng)創(chuàng)建。代碼如下:
如果想提取其中的多個(gè)文件,需要提供包含文件名稱(chēng)的列表。
提取單個(gè)文件
和提取多個(gè)文件相似。區(qū)別是,這次你需要指定文件名和解壓目錄;需要使用extract()方法,而不是extractall()。下面是一個(gè)提取單個(gè)文件的代碼片段:
讀取Zip文件
考慮以下場(chǎng)景:你需要查看zip存檔是否包含特定文件。到目前為止,你唯一的選擇是通過(guò)解壓所有文件。同樣,你也可能只提取大于特定大小的文件。其實(shí)zipfile模塊允許我們查詢存檔的內(nèi)容,而不必提取它。
使用ZipFile對(duì)象的namelist()方法將按名稱(chēng)返回歸檔的所有成員的列表。要獲取檔案中特定文件的信息,可以使用ZipFile對(duì)象的getinfo()方法。這將允許您訪問(wèn)特定文件的信息,例如文件的壓縮前后的大小或其上次修改時(shí)間。
當(dāng)有很多文件需要處理時(shí),對(duì)所有文件逐個(gè)調(diào)用getinfo()方法可能是一個(gè)令人討厭的過(guò)程。在這種情況下,可以使用infolist()方法返回包含歸檔中每個(gè)成員的ZipInfo對(duì)象的列表。列表中這些對(duì)象的順序與實(shí)際zip文件的順序相同。
您還可以使用read(file)方法從歸檔中直接讀取特定文件的內(nèi)容,其中file是要讀取的文件的名稱(chēng)。為此,必須以讀取或追加模式打開(kāi)歸檔。
要從歸檔中獲取單個(gè)文件的壓縮大小,可以使用compress_size屬性。同樣,要知道未壓縮的大小,可以使用file_size屬性。
以下代碼使用剛才討論的屬性和方法來(lái)提取大小低于1MB的文件。
要知道歸檔中特定文件最后修改的時(shí)間和日期,可以使用date_time屬性。這將返回一個(gè)包含六個(gè)值的元組,分別對(duì)應(yīng)年、月、日、日、時(shí)、分、秒。年份總是大于或等于1980,時(shí)、分、秒是從零計(jì)算的。
有關(guān)原始文件大小和壓縮文件大小的信息可以幫助您決定是否值得壓縮文件。我相信它可以用于其他一些場(chǎng)景。
最后的想法
從本教程中能看到,使用zipfile模塊來(lái)壓縮文件有很大的靈活性。可以根據(jù)類(lèi)型、名稱(chēng)或大小將目錄中的不同文件壓縮到不同的歸檔。你還可以決定是否要保留目錄結(jié)構(gòu)。同樣,在提取文件時(shí),您可以根據(jù)自己的標(biāo)準(zhǔn),如大小等,將它們提取到所需的位置。
實(shí)際上,通過(guò)編寫(xiě)我自己的代碼來(lái)壓縮和提取文件也是非常令人興奮的。我希望你喜歡的教程,如果你有任何問(wèn)題,請(qǐng)讓我知道的意見(jiàn)。
英文原文:https://code.tutsplus.com/tutorials/compressing-and-extracting-files-in-python--cms-26816
譯者:奇跡
總結(jié)
以上是生活随笔為你收集整理的python解压到指定文件夹_在Python中压缩和解压文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java interface 实例_Ja
- 下一篇: python字符串出栈方法_1.Pyth