python中解壓函數(shù) Python解壓

python zip函數(shù)的用法

定義:zip([iterable,

創(chuàng)新互聯(lián)建站專注于大城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供大城營銷型網(wǎng)站建設(shè),大城網(wǎng)站制作、大城網(wǎng)頁設(shè)計(jì)、大城網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造大城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供大城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

...])

zip()是Python的一個(gè)內(nèi)建函數(shù),它接受一系列可迭代的對象作為參數(shù),將對象中對應(yīng)的元素打包成一個(gè)個(gè)tuple(元組),然后返回由這些

tuples組成的list(列表)。若傳入?yún)?shù)的長度不等,則返回list的長度和參數(shù)中長度最短的對象相同。利用*號操作符,可以將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)]

對于這個(gè)并不是很常用函數(shù),下面舉幾個(gè)例子說明它的用法:

*

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

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

a

=

[[1,

2,

3],

[4,

5,

6],

[7,

8,

9]]

通過python列表推導(dǎo)的方法,我們也能輕易完成這個(gè)任務(wù)

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函數(shù):

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解壓,恰好得到我們“行列互換”的效果,再通過對每個(gè)元素應(yīng)用list()函數(shù),將tuple轉(zhuǎn)換為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'

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

稍微解釋下,先利用random.uniform()函數(shù)生成一個(gè)0-1之間的隨機(jī)數(shù)并復(fù)制給x,利用zip()函數(shù)將元素和他對應(yīng)的概率打包成tuple,然后將每個(gè)元素的概率進(jìn)行疊加,直到和大于x終止循環(huán)

這樣,”a”被選中的概率就是x取值位于0-0.1的概率,同理”b”為0.1-0.4,”c”為0.4-1.0,假設(shè)x是在0-1之間平均取值的,顯然我們的目的已經(jīng)達(dá)到

下載python然后有一堆文件要解壓

python一堆文件解壓方法如下。

壓縮包解壓要用的是zipfile這個(gè)包。

zip_file = zipfile.ZipFile(r'D:\數(shù)據(jù)源\XX_%s.zip'%yday)

zip_list = zip_file.namelist() # 壓縮文件清單,可以直接看到壓縮包內(nèi)的各個(gè)文件的明細(xì)

for f in zip_list: # 遍歷這些文件,逐個(gè)解壓出來,

zip_file.extract(f,r'D:\數(shù)據(jù)源')

zip_file.close() # 不能少!

print('昨日日志解壓完成,請?jiān)谖募A中驗(yàn)收!') # 當(dāng)然我是不需要查收的(*/ω\*)

這里的解壓操作實(shí)際就相當(dāng)于鼠標(biāo)右鍵“解壓到當(dāng)前文件夾”的效果。

完成解壓后運(yùn)行.close()是個(gè)比較好的習(xí)慣,否則可能會導(dǎo)致包括但不限于:

文件會一直被占用著,可能無法重新打開;

在進(jìn)程結(jié)束之前文件都刪不掉;

文件內(nèi)容不能即時(shí) flush 到磁盤直到進(jìn)程結(jié)束;

到此,整個(gè)流程在無需打開瀏覽器和文件夾的情況下便自動完成了。

為了方便日常運(yùn)行代碼,這里把上面的兩個(gè)流程包裝成一個(gè)函數(shù),下載解壓

#下載昨日日志

def download_XXlog():

yday = (date.today()+timedelta(days=-1)).strftime('%Y%m%d') # 獲取昨日日期

r =? requests.get(''%yday) # 獲取以日期命名的壓縮包信息

with open(r'D:\數(shù)據(jù)源\XX_%s.zip'%yday,'wb') as code: # 將壓縮包內(nèi)容寫入到 "D:\數(shù)據(jù)源\" 下,并按日期命名

code.write(r.content)

print('昨日XX日志下載完成。')

zip_file = zipfile.ZipFile(r'D:\數(shù)據(jù)源\XX_%s.zip'%yday)

zip_list = zip_file.namelist() # 壓縮文件清單,可以直接看到壓縮包內(nèi)的各個(gè)文件的明細(xì)

for f in zip_list: # 遍歷這些文件,逐個(gè)解壓出來,

? ? zip_file.extract(f,r'D:\數(shù)據(jù)源')

zip_file.close() # 不能少!

print('昨日日志解壓完成,請?jiān)谖募A中驗(yàn)收!')

download_XXlog()

拓展

作為拓展,這里再加一個(gè)可以根據(jù)實(shí)際情況輸入(input)起始和終止日期,來下載一個(gè)特定時(shí)間段日志的函數(shù),這里就涉及了datetime和time這兩個(gè)工具包了。

python怎樣壓縮和解壓縮ZIP文件

1、python使用zipfile模塊壓縮和解壓ZIP文件

2、讀取zip文件

首先,通過zipfile模塊打開指定zip文件,如:

zpfd = zipfile.ZipFile(path, mode='r')

對于zipfile,其標(biāo)志與open所用的打開文件標(biāo)志有所不同,不能識別 'rb'。

然后,讀取zip文件中的內(nèi)容,zipfile對象提供一個(gè)read(name)的方法,name為zip文件中的一個(gè)文件入口,執(zhí)行完成之后,將返回讀出的內(nèi)容,如:

for filename in zpfd.namelist():

tmpcont = zpfd.read(filename)

print 'len(tmpcont)', 'tmpcont'

需要注意的是,讀取zip文件時(shí),只能讀取內(nèi)容

3、寫入zip文件

首先,需要zipfile模塊寫打開或創(chuàng)建zip文件,如:

zpfd = zipfile.ZipFile(path, mode='w')

寫打開是標(biāo)志可以為'w'或'a'('a'表示寫入一個(gè)zip文件), 或者傳入第三個(gè)參數(shù)cmopression壓縮標(biāo)志

compression=zipfile.ZIP_DEFLATED 需要導(dǎo)入zlib模塊

compression=zipfile.ZIP_STORED則表示只對文件進(jìn)行打包,并不壓縮

入有兩種方式,一種是直接寫入一個(gè)已經(jīng)存在的文件,可使用zipfile對象中write(filename, arcname,

compress_type)第一個(gè)參數(shù)為文件名,第二個(gè)參數(shù)指寫入zip文件中的文件名,默認(rèn)與filename一致,第三個(gè)參數(shù)壓縮標(biāo)志可以覆蓋打開

zipfile時(shí)的使用參數(shù);另一種是寫入一個(gè)字符串,可使用zipfile對象中的writestr(zinfo_or_arcname,

bytes),第一個(gè)參數(shù)是zipinfo對象或?qū)懙絲ip文件中的壓縮名,第二個(gè)參數(shù)是待寫入的字符串

4、最后,對于打開的zipfile對象需要進(jìn)行關(guān)閉,從而使得寫入內(nèi)容真正寫入磁盤,即:

zpfd.close()

本文名稱:python中解壓函數(shù) Python解壓
分享網(wǎng)址:http://www.muchs.cn/article2/hphjoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、服務(wù)器托管虛擬主機(jī)、品牌網(wǎng)站制作電子商務(wù)、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)