python 编程一日一练-Python每日一练0022
问题
你想在一个文件里每次读入固定大小的字节,比如每次读入4个字节并转成int,或者每次读入x个字节并进行结构化,例如:
l = [5, 2, 4, 1, 2, 4, 5, 6, 8]
with open('test', 'wb') as fd:
for num in l:
fd.write(num.to_bytes(4, 'big'))
解决方案
可以简单的用while循环来完成
with open('test', 'rb') as fd:
r = fd.read(4)
while r:
print(int.from_bytes(r, 'big'), end=' ')
r = fd.read(4)
输出为5 2 4 1 2 4 5 6 8
但更优雅的做法是结合使用iter和functools.partial
from functools import partial
with open('test', 'rb') as fd:
for r in iter(partial(fd.read, 4), b''):
print(int.from_bytes(r, 'big'), end=' ')
输出同样是5 2 4 1 2 4 5 6 8
讨论
functools.partial的作用是对一个函数进行包装(可以将一些参数的值固定)并生成一个新的签名,例如:
>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.__doc__ = 'Convert base 2 string to an int.'
>>> basetwo('10010')
18
functools.partial的大致实现如下:
def partial(func, *args, **keywords):
def newfunc(*fargs, **fkeywords):
newkeywords = keywords.copy()
newkeywords.update(fkeywords)
return func(*args, *fargs, **newkeywords)
newfunc.func = func
newfunc.args = args
newfunc.keywords = keywords
return newfunc
而iter的作用是当只有一个参数时,对这个对象进行迭代,所以这个对象必须实现__iter()__或__getitem()__方法,例如:
>>> l = [1, 2, 3, 4]
>>> for i in iter(l):
... print(i, end=' ')
...
>>> 1 2 3 4
但当有两个参数时,第一个参数必须是可调用的(比如函数),第二个参数是终止的值,当调用第一个参数返回的结果等于第二个参数时,迭代就停止了,例如:
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)
所以综合两个方法来看上面的iter(partial(fd.read, 4), b''),就是每次调用fd.read(4)直到返回一个空的bytes
来源
Python Cookbook
关注
欢迎关注我的微信公众号:python每日一练
python 编程一日一练-Python每日一练0022相关推荐
- python编程在哪里写-python入门该从哪里开始?
相信对于每个人而言,知道编程和学习编程这件事,出发点是不同的.汤哥在北京接触编程的时间是2013年,那个时候还在一个二线城市上大学,还没有这么多各种融资,各种互联网创业的氛围,大家想的更多的是一些线下 ...
- python编程方式_自学python编程的方法路线
怎么自学python编程 如何自学Python编程?一堆的Python教程却感觉无从下手呢?我想这应该是很多Python初学者正在纠结的问题. 今天想要分享给大家的是如何自学Python编程,学习这件 ...
- python编程300集免费-python 300本电子书合集
链接: https://pan.baidu.com/s/1CNlB35ASnDNlUGNCZJbiAA 提取码: fxig Q群:592857363 更多所在 数据科学速查表 零起点Python机器学 ...
- python编程输入标准-揭秘python编程技巧
揭秘python编程技巧 一.python的标准输入和输出[root@133 wc]# vim stdin.py #!/usr/bin/python #encoding:utf-8 import sy ...
- python编程入门-Python编程入门经典pdf(Python编程入门教程) 高清中文版
Python编程入门经典pdf(Python编程入门教程)下载.Python编程入门经典pdf高清版帮助各位更好的进行Python编程的学习以及理解,最经典的课题,最深入的概念,让你在Python编程 ...
- python开发cs程序_CSE209代做、代写Computer Graphics、代做CS/python编程设计代写Python程序|代做Processing...
CSE209代做.代写Computer Graphics.代做CS/python编程设计代写Python程序|代做ProcessingCSE209 Computer Graphics~1~CSE209 ...
- Python编程好学吗 为什么Python如此受欢迎
Python编程好学吗?为什么Python如此受欢迎?Python的包装能力.可组合性.可嵌入性都很好,可以把各种复杂性包装在Python模块里,暴露出漂亮的接口.因此,Python自然是大受欢迎. ...
- 手机版python编程软件下载,手机python编程软件
1.求 python 64位安装包下载 软件介绍: python是一款面向对象.解释型.动态数据类型的高级编程设计语言.它拥有语言上的简洁性.可读性和易维护性,在图形处理.数学处理.文本处理.系统编程 ...
- 树莓派python编程优点_树莓派为什么会使用python编程?为什么有时python运行效率不高?...
在许多编程语言中,Python的语法也有很大不同.Python使用空格或缩进来分隔不同的代码块.C语言和其他语言使用花括号来区分不同的代码块,例如if语句,Python使用冒号和缩进来定义代码块.这也 ...
- python 编程一日一练-python每日一练
广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 过滤掉列表中的负数 筛选出字典{lilei: 79,jim: 88,lu ...
最新文章
- 肖仰华:知识图谱落地,不止于“实现”
- PWA之push服务
- 有人质疑面向对象编程?
- python画函数曲线-Python 绘制你想要的数学函数图形
- CentOS 7 用yum安装 MySQL
- HDU - 6082 度度熊与邪恶大魔王(背包变式)
- leetcode 202. 快乐数 思考分析(哈希集合与双指针解)
- Android开发技术周报 Issue#72
- SQLite3扩展C API
- mysql导vertica_vertica系列:数据的导入导出
- “网页上有错误”的解决方法
- System.ComponentModel.Win32Exception (0x80004005):拒绝访问。——解决办法
- MIUI刷第三方rec教程(回退系统)
- 惠普安装linux系统u盘,怎么用U盘安装linux系统
- 软件测试的各种技术你知道吗?
- 三、使用HM进行简单的视频隐写demo
- HTML常见的扩展名,HTML文件通常带有.html或.htm的文件扩展名
- 计算机什么课学mcmc,MCMC案例学习
- linux eap网络,linux – 定期无法连接到WPA2-EAP接入点
- flask中的所有第三方模块大集合