我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

python解压函数 Python压缩算法

用python解压图片并打印代码

import zipfile

创新互联服务项目包括崇明网站建设、崇明网站制作、崇明网页制作以及崇明网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,崇明网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到崇明省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

# 传入压缩文件zfile.zip获取相关信息

zip_file = zipfile.ZipFile('zfile.zip')

# 获取压缩文件中的内容

f_content = zip_file.namelist()

# 压缩前的大小

f_size = zip_file.getinfo('zfile/a.txt').file_size

# 压缩后的大小

c_size = zip_file.getinfo('zfile/a.txt').compress_size

ZipFile 对象有一个 namelist()方法,返回 ZIP 文件中包含的所有文件和文件夹 的字符串的列表。这些字符串可以传递给 ZipFile 对象的 getinfo()方法,返回一个关 于特定文件的 ZipInfo 对象。ZipInfo 对象有自己的属性,诸如表示字节数的 file_size 和 compress_size,它们分别表示原来文件大小和压缩后文件大小。ZipFile 对象表示 整个归档文件,而 ZipInfo 对象则保存该归档文件中每个文件的有用信息。

从 ZIP 文件中解压缩

ZipFile 对象的 extractall()方法从 ZIP 文件中解压缩所有文件和文件夹,放到当 前工作目录中。

import zipfile

zip_file = zipfile.ZipFile('zfile.zip')

# 解压

zip_extract = zip_file.extractall()

zip_extract.close()

运行这段代码后, example.zip 的内容将被解压缩到 C:\。 或者, 你可以向 extractall()传递的一个文件夹名称,它将文件解压缩到那个文件夹,而不是当前工作 目录。如果传递给 extractall()方法的文件夹不存在,它会被创建。例如,如果你用 exampleZip.extractall('C:\ delicious')取代处的调用,代码就会从 example.zip 中解压 缩文件,放到新创建的 C:\delicious 文件夹中。

ZipFile 对象的 extract()方法从 ZIP 文件中解压缩单个文件。

创建和添加到 ZIP 文件

要创建你自己的压缩 ZIP 文件,必须以“写模式”打开 ZipFile 对象,即传入'w' 作为第二个参数(这类似于向 open()函数传入'w',以写模式打开一个文本文件)。

如果向 ZipFile 对象的 write()方法传入一个路径,Python 就会压缩该路径所指 的文件,将它加到 ZIP 文件中。write()方法的第一个参数是一个字符串,代表要添 加的文件名。第二个参数是“压缩类型”参数,它告诉计算机使用怎样的算法来压 缩文件。可以总是将这个值设置为 zipfile.ZIP_DEFLATED(这指定了 deflate 压缩 算法,它对各种类型的数据都很有效)。

import zipfile

zip_file = zipfile.ZipFile('new.zip','w')

# 把zfile整个目录下所有内容,压缩为new.zip文件

zip_file.write('zfile',compress_type=zipfile.ZIP_DEFLATED)

# 把c.txt文件压缩成一个压缩文件

# zip_file.write('c.txt',compress_type=zipfile.ZIP_DEFLATED)

zip_file.close()

这段代码将创建一个新的 ZIP 文件,名为 new.zip,它包含 spam.txt 压缩后的内容。

要记住,就像写入文件一样,写模式将擦除 ZIP 文件中所有原有的内容。如果 只是希望将文件添加到原有的 ZIP 文件中,就要向 zipfile.ZipFile()传入'a'作为第二 个参数,以追加模式打开 ZIP 文件。

Python 之内置函数:filter、map、reduce、zip、enumerate

这几个函数在 Python 里面被称为高阶函数,本文主要学习它们的用法。

filter 函数原型如下:

第一个参数是判断函数(返回结果需要是 True 或者 False),第二个为序列,该函数将对 iterable 序列依次执行 function(item) 操作,返回结果是过滤之后结果组成的序列。

简单记忆:对序列中的元素进行筛选,获取符合条件的序列。

返回结果为: ,使用 list 函数可以输入序列内容。

map 函数原型如下:

该函数运行之后生成一个 list,第一个参数是函数、第二个参数是一个或多个序列;

下述代码是一个简单的测试案例:

上述代码运行完毕,得到的结果是: 。使用 print(list(my_new_list)) 可以得到结果。

map 函数的第一个参数,可以有多个参数,当这种情况出现后,后面的第二个参数需要是多个序列。

map 函数解决的问题:

reduce 函数原型如下:

第一个参数是函数,第二个参数是序列,返回计算结果之后的值。该函数价值在于滚动计算应用于列表中的连续值。

测试代码如下:

最终的结果是 6,如果设置第三个参数为 4,可以运行代码查看结果,最后得到的结论是,第三个参数表示初始值,即累加操作初始的数值。

简单记忆:对序列内所有元素进行累计操作。

zip 函数原型如下:

zip 函数将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一样,则返回列表长度与最短的对象相同,利用星号( * )操作符,可以将元组解压为列表。

测试代码如下:

展示如何利用 * 操作符:

输出结果如下:

简单记忆:zip 的功能是映射多个容器的相似索引,可以方便用于来构造字典。

enumerate 函数原型如下:

参数说明:

该函数用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

测试代码如下:

返回结果为: 。

本文涉及的函数可以与 lambda 表达式进行结合,能大幅度提高编码效率。最好的学习资料永远是官方手册

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之间平均取值的,显然我们的目的已经达到

下载python然后有一堆文件要解压

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

压缩包解压要用的是zipfile这个包。

zip_file = zipfile.ZipFile(r'D:\数据源\XX_%s.zip'%yday)

zip_list = zip_file.namelist() # 压缩文件清单,可以直接看到压缩包内的各个文件的明细

for f in zip_list: # 遍历这些文件,逐个解压出来,

zip_file.extract(f,r'D:\数据源')

zip_file.close() # 不能少!

print('昨日日志解压完成,请在文件夹中验收!') # 当然我是不需要查收的(*/ω\*)

这里的解压操作实际就相当于鼠标右键“解压到当前文件夹”的效果。

完成解压后运行.close()是个比较好的习惯,否则可能会导致包括但不限于:

文件会一直被占用着,可能无法重新打开;

在进程结束之前文件都删不掉;

文件内容不能即时 flush 到磁盘直到进程结束;

到此,整个流程在无需打开浏览器和文件夹的情况下便自动完成了。

为了方便日常运行代码,这里把上面的两个流程包装成一个函数,下载解压

#下载昨日日志

def download_XXlog():

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

r =  requests.get(''%yday) # 获取以日期命名的压缩包信息

with open(r'D:\数据源\XX_%s.zip'%yday,'wb') as code: # 将压缩包内容写入到 "D:\数据源\" 下,并按日期命名

code.write(r.content)

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

zip_file = zipfile.ZipFile(r'D:\数据源\XX_%s.zip'%yday)

zip_list = zip_file.namelist() # 压缩文件清单,可以直接看到压缩包内的各个文件的明细

for f in zip_list: # 遍历这些文件,逐个解压出来,

    zip_file.extract(f,r'D:\数据源')

zip_file.close() # 不能少!

print('昨日日志解压完成,请在文件夹中验收!')

download_XXlog()

拓展

作为拓展,这里再加一个可以根据实际情况输入(input)起始和终止日期,来下载一个特定时间段日志的函数,这里就涉及了datetime和time这两个工具包了。

python怎么修改压缩文件中的文件

python解压修改压缩文件中的文件。使用python修改压缩文件中的文件可以先将压缩文件解压,待修改完成后,再将所有文件压缩成压缩文件,所以python解压修改压缩文件中的文件。

请简述zip函数的功能及Python.3.x中使用zip函数生成列表的方法。

一、zip函数的功能如下:

将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。当各个迭代器中元素的个数不一致时,则返回列表中长度最短的情况,利用 *号操作符,可以将元组解压为列表。

二、Python.3.x中使用zip函数生成列表的方法如下:

1、作出说明,使用zip函数将可迭代的对象作为参数。

2、将对象中对应的元素打包成一个个元组。

3、用zip函数平行地遍历多个迭代器,如果可迭代对象的长度不相同将按短的序列为准。

4、遍历过程中产生元组,Python.3.x会把元组生成好,然后生成列表。


本文标题:python解压函数 Python压缩算法
转载来源:http://mswzjz.cn/article/dodehch.html

其他资讯