python里zip,Python中?

本文目錄一覽:

python zip函數

zip()函數用於將可迭代的對象作為參考,將對象中對應的元素打包成一個個遠足,然後返回有這些元祖組成的列表。

zip([iterabale,….])

python中zip函數詳解

a=[1,2,3,4,5,6,7,8,9]

b=[5,9,2,4,5,7,3,1,7]

c=list(zip(a,b))#打包

print(c)

輸出內容:[[1,5],[2,9],[3,2],[4,4],[5,5],[6,7],[7,3],[8,1],[9,7]]

d=list(zip(*c))#解包

print(d)

輸出內容:[[1,2,3,4,5,6,7,8,9],[5,9,2,4,5,7,3,1,7]]

Python打開zip文件

    Zip文件格式是通用的文檔壓縮標準。自1.6版本起,Python中zipfile模塊能夠直接處理zip文件里的數據,例如需要將對應目錄或多個文件打包或壓縮成zip格式,或者需要查看一個zip格式的歸檔文件中部分或者所有文件同時避免講這些文件展開到磁盤上。使用ZipFile類來操作zip文件。

創建一個ZipFile對象,表示一個zip文件。

     參數file:文件的路徑或者類似文件對象

     參數mode:讀”r”,寫入”w”,添加”a”

     參數compression: ZIP_STORED(無壓縮),ZIP_DEFLATED(壓縮,需要zlib支持)

     參數allowZip64:默認情況下報錯,將其設為True,ZipFile將用ZIP64擴展進行創建文件。

下面示例演示了讀取一個zip文檔,將文檔里所有文件解壓到名為”work”的文件里。

import zipfile

if __name__ == “__main__”:

    zFile = zipfile.ZipFile(“F:\\txt.zip”,”r”)

    #ZipFile.namelist():獲取ZIP文檔內所有文件的名稱列表

    for fileM in zFile.namelist():

        zFile.extract(fileM,”F:\\work”)

        zFile.close()

read(self,name,pwd=None)獲取ZIP文檔內文件的二進制數據

下面例子演示了使用read方法獲取ZIP文檔中mango.txt文件的數據,並寫到copy.txt文件中

import zipfile 

if __name__ == “__main__”:

    zipFile = zipfile.ZipFile(‘F:\\test.zip’,’r’)

    data = zipFile.read(“mango.txt”)

    (lambda f,d:(f.write(d),f.close()))(open(“F:\\copy.txt,’w”),data)

    zipFile.close()

write(self, filename, arcname=None, compress_type=None)將指定文件寫入ZIP文檔中

     參數filename:需要寫入文件的路徑

     參數arcname:文件寫入ZIP文檔後保存的文件名

     參數compress_type:壓縮方法(ZIP_STORED或ZIP_DEFAULED)

下面離子演示了創建一個zip文檔,將test.docx文件寫入壓縮文檔裏面。

import zipfile

if __name__ == “__main__”:

    zipFile = zipfile.ZipFile(“F:\\test.zip”,”w”)

    zipFile.write(“F:\\test.docx”,”ok.docx”,zipfile.ZIP_DEFLATED)

    zipFile.close()

getinfo(name)返回一個ZipInfo類的對象。

import zipfile

if __name__ == “__main__”:

    zipInfo = zipFile.getinfo(ok.docx)

    print(“filename:”,zipInfo.filename)

    print(“date_time:”,zipInfo.date_time)

常用函數

關閉歸檔文件,你必須在退出程序之前調用close()否則將不會寫入關鍵記錄數據。

返回一個ZipInfo對象,其中包含有關歸檔成員name的信息。針對一個目前並不包含于歸檔中的名稱調用getinfo()將會引發KeyError。

   返回一個列表,其中包含每個歸檔成員的ZipInfo對象。如果是打開一個現有歸檔則這些對象的排列順序與他們對於條目在磁盤上的實際ZIP文件中的順序一致。

返回按名稱排列的歸檔成員列表。

以二進制文件類對象的形式訪一個歸檔成員。name可以是歸檔內某個文件的名稱也可以是某個ZipInfo對象。如果包含了mode形參,則它必須為”r”(默認值)或”w”。pwd為用於解密已加密Zip文件的密碼。

open()也是一個上下文 管理器,因此支持with語句:

with ZipFile(‘spam.zip’) as myzip:

    with myzip.open(‘eggs.txt’) as myfile:

    print(myfile.read())

如果mode為「r」則文件類對象(ZipExtFile)將只讀並且提供下列方法:read(),readline(),readlines(),seek(),tell(),__iter__(),__next__()。這些對象可獨立於ZipFile進行操作。

如果mode=’w’則返回一個可寫入的文件句柄,它將支持write()方法。當一個可寫入的文件句柄被打開時,嘗試讀寫ZIP文件中的其他文件將會引發ValueError。

當寫入一個文件時,如果文件大小不能預先確定但是可能超過2GiB,可傳入force_zip64=True以確保標頭格式能夠支持超大文件。如果文件大小可以預先確定,則在構造ZipInfo對象時應設置file_size,並將其作name形參。

從歸檔中提取一個成員放入當前工作目錄;member必須為成員的完整名稱或ZipInfo對象。成員的文件信息會儘可能精確地被提取。path指定一個要提取到的不同目錄。member可以是一個文件名或ZipInfo對象。pwd是用於解密文件的密碼。返回所創建的經正規化的路徑(對應於目錄或新文件)。

從歸檔中提取出所有成員放入當前工作目錄。path指定一個要提取到的不同的目錄。members為可選項且必須為namelist()所返回列表的一個子集。pwd是用於解密文件的密碼。

警告:絕不要未經預先檢驗就從不可靠的源中提取歸檔文件。 這樣有可能在  path  之外創建文件,例如某些成員具有以 “/” 開始的文件名或帶有兩個點號 “..” 的文件名。 此模塊會嘗試防止這種情況。 參見  extract()  的注釋。

將歸檔是目錄表打印到sys.stdout.

設置pwd為用於提取已加密文件的默認密碼。

返回歸檔中文件name的位元組數據。name是歸檔中文件的名稱,或是一個ZipInfo對象。歸檔必須以讀取或追加方式打開。pwd為用於已加密文件的密碼,並且如果指定該參數則它將覆蓋通過setpassword()設置的默認密碼。 on a ZipFile that uses a compression method 在使用  ZIP_STORED  ,  ZIP_DEFLATED ,  ZIP_BZIP2  或  ZIP_LZMA  以外的壓縮方法的 ZipFile 上調用  read()  將引發  NotImplementedError 。 如果相應的壓縮模塊不可用也會引發錯誤。

讀取歸檔中的所有文件並檢查他們的CRC和文件頭。返回第一個已損壞文件的名稱,在其他情況下則返回None。

將名為filename的文件寫入歸檔,給予的歸檔名為arcname(默認情況下將與filename一致,但是不帶驅動器盤符並會移除開頭的路徑分隔符)。compress_type如果給出,它將覆蓋作為構造器compression形參對於新條目所給出的值。類似地,compresslevel如果給出也將覆蓋構造器。歸檔必須使用”w”,”x「或”a”模式打開。

將一個文件寫入歸檔。 內容為  data ,它可以是一個  str  或  bytes  的實例;如果是  str ,則會先使用 UTF-8 進行編碼。  zinfo_or_arcname  可以是它在歸檔中將被給予的名稱,或者是  ZipInfo  的實例。 如果它是一個實例,則至少必須給定文件名、日期和時間。 如果它是一個名稱,則日期和時間會被設為當前日期和時間。 歸檔必須以 ‘w’, ‘x’ 或 ‘a’ 模式打開。

ZIP文件的名稱

python中zip函數有哪些高級用法

zip()  功能是從參數的多個迭代器中選取元素組合成一個新的迭代器。顧名思義,它就是一個將對象進行打包和解包的函數。

它可以傳入的參數包括;元組、列表、字典等迭代器

它返回一個zip對象,其內部元素為元組,一組一組的,可以轉化為列表或元組,這裡要強調一下,Python2和Python3中返回的zip對象有所不同。

Python3中zip()函數再不再返回list對象,但是可以通過list強行轉換。(類似的函數變化還有dictionary關聯的keys()、values()、items(),map(),filter())。

打包zip(iterables)

上面的代碼使用的環境是Python3.6,其中list (z)操作就是強制轉換。注意一個問題,a和b這兩個列表是不同長短的,這時候zip函數就會匹配完最短的那個便結束。

當zip函數的參數只有一個時,它將從iterable中依次取一個元素,組成一個元組。

解包zip(*iterables)

解包,zip 相反,可理解為解壓,返回多維矩陣形式,有幾個組元素就返回幾維的。

比如,下面我是用三個列表組合起來的迭代式,那麼解壓後就返回三維的矩陣

zip高級用法

講完了基本的再來說一下該函數的高級用法。高級用法離不開一個詞:Pythonic,就是將代碼寫的更優雅美觀,看起來有逼格!

1. 列表推導

例如:

a = [1,2,3,4]

b = [5,6,7,8]

我們要同時遍歷a、b,且要對它們進行操作,那就要放在同一個for循環內,zip函數正好合適

注意:如果是Python2環境中,要使用izip才能提高效率。

當然,如果你需要對下標進行操作,那麼還需要加上enumerate函數

2. 使用zip創建鍵值對,zip方法返回的是一個元組,用它來創建鍵值對,簡單明了。

Python實現批量壓縮文件/文件夾——zipfile

zipfile是python里用來做zip格式編碼的壓縮和解壓縮的,由於是很常見的zip格式,所以這個模塊使用頻率也是比較高的,

在這裡對zipfile的使用方法做一些記錄。即方便自己也方便別人。

Python zipfile模塊用來做zip格式編碼的壓縮和解壓縮的,要進行相關操作,首先需要實例化一個 ZipFile 對象。ZipFile 接受一個字符串格式壓縮包名稱作為它的必選參數,第二個參數為可選參數,表示打開模式,類似於文件操作,有r/w/a三種模式,分別代表讀、寫、添加,默認為r,即讀模式。

zipfile里有兩個非常重要的class, 分別是ZipFile和ZipInfo, 在絕大多數的情況下,我們只需要使用這兩個class就可以了。ZipFile是主要的類,用來創建和讀取zip文件而ZipInfo是存儲的zip文件的每個文件的信息的。

ZipFile還提供了如下常用的方法和屬性:

獲取zip文檔內指定文件的信息。返回一個zipfile.ZipInfo對象,它包括文件的詳細信息。

獲取zip文檔內所有文件的信息,返回一個zipfile.ZipInfo的列表。

獲取zip文檔內所有文件的名稱列表。

將zip文檔內的指定文件解壓到當前目錄。參數member指定要解壓的文件名稱或對應的ZipInfo對象;參數path指定了解析文件保存的文件夾;

解壓zip文檔中的所有文件到當前目錄。參數members的默認值為zip文檔內的所有文件名稱列表,也可以自己設置,選擇要解壓的文件名稱。

將zip文檔內的信息打印到控制台上。

設置zip文檔的密碼。

python zip函數的用法

定義:zip([iterable, …])

zip()是Python的一個內建函數,它接受一系列可迭代的對象作為參數,將對象中對應的元素打包成一個個tuple(元組),然後返回由這些 tuples組成的list(列表)。若傳入參數的長度不等,則返回list的長度和參數中長度最短的對象相同。利用*號操作符,可以將list unzip(解壓),看下面的例子就明白了:

1 2 3 4 5 6 7 8 9

a = [1,2,3] b = [4,5,6] c = [4,5,6,7,8] zipped = zip(a,b) [(1, 4), (2, 5), (3, 6)] zip(a,c) [(1, 4), (2, 5), (3, 6)] zip(*zipped) [(1, 2, 3), (4, 5, 6)]

對於這個並不是很常用函數,下面舉幾個例子說明它的用法:

* 二維矩陣變換(矩陣的行列互換)

比如我們有一個由列表描述的二維矩陣

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

通過python列表推導的方法,我們也能輕易完成這個任務

1 2

print [ [row[col] for row in a] for col in range(len(a[0]))] [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

另外一種讓人困惑的方法就是利用zip函數:

1 2 3 4 5

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] zip(*a) [(1, 4, 7), (2, 5, 8), (3, 6, 9)] map(list,zip(*a)) [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

這種方法速度更快但也更難以理解,將list看成tuple解壓,恰好得到我們「行列互換」的效果,再通過對每個元素應用list()函數,將tuple轉換為list

* 以指定概率獲取元素

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

import random def random_pick(seq,probabilities): x = random.uniform(0, 1) cumulative_probability = 0.0 for item, item_probability in zip(seq, probabilities): cumulative_probability += item_probability if x cumulative_probability: break return item for i in range(15): random_pick(“abc”,[0.1,0.3,0.6]) ‘c’ ‘b’ ‘c’ ‘c’ ‘a’ ‘b’ ‘c’ ‘c’ ‘c’ ‘a’ ‘b’ ‘b’ ‘c’ ‘a’ ‘c’

這個函數有個限制,指定概率的列表必須和元素一一對應,而且和為1,否則這個函數可能不能像預想的那樣工作。

稍微解釋下,先利用random.uniform()函數生成一個0-1之間的隨機數並複製給x,利用zip()函數將元素和他對應的概率打包成tuple,然後將每個元素的概率進行疊加,直到和大於x終止循環

這樣,」a」被選中的概率就是x取值位於0-0.1的概率,同理」b」為0.1-0.4,」c」為0.4-1.0,假設x是在0-1之間平均取值的,顯然我們的目的已經達到

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/198274.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-04 10:24
下一篇 2024-12-04 10:24

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論