日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python压缩_Python札记 -- 文件压缩

發(fā)布時(shí)間:2024/3/13 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python压缩_Python札记 -- 文件压缩 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在日常工作當(dāng)中免不了要對(duì)文件進(jìn)行壓縮,Python標(biāo)準(zhǔn)庫(kù)里也提供了實(shí)現(xiàn)壓縮功能的模塊。

一、簡(jiǎn)單的例子

首先了解一下壓縮單個(gè)文件在Python中怎么實(shí)現(xiàn)。竹風(fēng)建了個(gè)測(cè)試文件夾zip_text,里面有test.apk和zip_model_test.py兩個(gè)文件。如下圖所示:

目標(biāo)是將test.apk打包成test.zip。編寫如下代碼:

1 #!/usr/bin/env python

2 #coding:utf-8

3

4 importzipfile5

6 file = '/home/jacky/tmp/zip_test/test.apk'

7

8 f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)9 f.write(file)10 f.close()

首先使用ZipFile打開一個(gè)壓縮文件,然后將需要壓縮的文件通過(guò)write方法傳入,最后close即可。跟普通文件的讀寫操作是一致的。執(zhí)行后的效果如下:

二、重寫壓縮包里的目錄結(jié)構(gòu)

壓縮單個(gè)文件的功能已經(jīng)實(shí)現(xiàn)了,美中不足的是,壓縮包里面的目錄結(jié)構(gòu)跟傳進(jìn)去的參數(shù)結(jié)構(gòu)是一樣的。

可以通過(guò)在write方法傳遞arcname參數(shù)來(lái)設(shè)置路徑(wirte的函數(shù)原型為ZipFile.write(filename[, arcname[, compress_type]]))。修改代碼如下:

1 #!/usr/bin/env python

2 #coding:utf-8

3

4 importzipfile5

6 file = '/home/jacky/tmp/zip_test/test.apk'

7

8 f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)9 f.write(file, '/res/new_file_name.apk')10 f.close()

三、壓縮目錄

但是更多的情況是要壓縮一個(gè)文件夾。直接將文件夾作為參數(shù)傳入,會(huì)有什么樣的效果呢?

1 #!/usr/bin/env python

2 #coding:utf-8

3

4 importzipfile5

6 file = '/home/jacky/tmp/zip_test/'

7

8 f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)9 f.write(file)10 f.close()

執(zhí)行代碼后,的確生成了一個(gè)壓縮文件,可惜解壓這個(gè)文件的時(shí)候,卻發(fā)現(xiàn)里面只有文件夾的結(jié)構(gòu),一個(gè)文件都沒有。。。

想達(dá)到壓縮文件夾的效果,得借助一下glob模塊了。借助glob.glob(pathname)來(lái)獲得一個(gè)由指定文件夾下的文件名組成的列表,然后對(duì)此進(jìn)行遍歷,代碼如下:

1 #!/usr/bin/env python

2 #coding:utf-8

3

4 importzipfile5 importglob6

7 files = glob.glob('/home/jacky/tmp/zip_test/zip_dir_test/*')8 f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)9

10 for file infiles:11 f.write(file)12 f.close()

效果如下:

生成的壓縮包還可以更完美些,比如保留源文件的名字,修改一下壓縮包里面的目錄結(jié)構(gòu)。借組os模塊的os.path.basename(path),可以取得文件名,修改后代碼如下:

1 #!/usr/bin/env python

2 #coding:utf-8

3

4 importzipfile5 importglob6 importos7

8 files = glob.glob('/home/jacky/tmp/zip_test/zip_dir_test/*')9 f = zipfile.ZipFile('test.zip', 'w', zipfile.ZIP_DEFLATED)10

11 for file infiles:12 f.write(file, '/MyDirPath/' +os.path.basename(file))13 f.close()

這樣就可以根據(jù)實(shí)際需要生成壓縮包里面的目錄結(jié)構(gòu)了。

四、其他功能

既然可以壓縮,當(dāng)然Python也提供了解壓的方法。ZipFile.extractall([path[, members[, pwd]]]),path為解壓路徑,members為需要解壓的文件,另外如果壓縮文件有密碼時(shí),需要輸入pwd。

ZipFile模塊內(nèi)還有很多實(shí)用的功能,限于篇幅所限,就不一一敘述了,大家可查閱Python的官方文檔。

總結(jié)

以上是生活随笔為你收集整理的python压缩_Python札记 -- 文件压缩的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。