定義: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
[
[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一堆文件解壓方法如下。
壓縮包解壓要用的是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è)工具包了。
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)