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每日一题总结4
20180609 qzd 每日一题14 输入三个整数x,y,z,请把这三个数由小到大输出. my code x=int(input('x:')) y=int(input('y:')) z=int(in ...
- python实训名片管理程序_python实现名片管理系统
------------------------------------------------------ 想要掌握什么知识,就需要在什么花费时间,浮躁的看,过目即忘,再加上学完了,并不使用,过几天 ...
- 利用python和Tushare自动更新A股每日数据
利用python和Tushare自动更新A股每日数据 tushare ID :423004 所需接口 整体思路为: 1.利用stock_basic获取ts_code,获得沪深全部上市公司股票代码 2. ...
- Python也可以很暖男之每日发送爱词霸每日一句+日期+农历+天气预报+各种天气指数(更新)
Python也可以很暖男之每日发送爱词霸每日一句中英文+日期+农历+天气预报+各种天气指数(只学了一个多月新手的第二个实战项目,代码写的不好,请轻喷,谢谢,有很多网友问为何用不了,因为中国天气网改了代 ...
- 名片管理程序Python
任务二:名片管理程序 1.任务内容:现需制作一个名片管理器程序,能够实现名片的增删改查功能,每张名片主要内容有:姓名.职位.住址.程序若未退出前,则一直循环运行. 代码如下:
- [转载] python中for语句用法_详解Python中for循环的使用_python
参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...
- Python基础_第2章_Python运算符与if结构
Python基础_第2章_Python运算符与if结构 文章目录 Python基础_第2章_Python运算符与if结构 Day02之`Python运算符与if结构` 一.昨日回顾 1.回顾昨天的课程 ...
- python数据分析最基本的库_Python数据分析库pandas基本操作方法_python
下面就为大家分享一篇Python数据分析库pandas基本操作方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 pandas是什么? 是它吗? ....很显然pandas没有这个家伙那么可 ...
- python中for语句用法_详解Python中for循环的使用_python
这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...
最新文章
- 自动驾驶测试:MIL、SIL、PIL、HIL
- ESP32模块的MicroPython的基本实验
- APPLE:疑问驱动下的学习与实践
- 【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )
- Android异步任务机制之AsycTask
- Python服务器开发三:Socket
- matlab中bwlabel意思,Matlab 里bwlabel 函数的具体含义
- linux用u盘上传文件,linux如何挂载U盘和文件系统(或需要用到).doc
- Matplotlib 整合与细节操作(样式、图例、风格、轴线、网格)
- [再学Python] - 2 - math库和random库
- 计算机等级的判断,计算机等级考试一级WPS判断题及答案
- 数据科学 第 5 章 主成分分析(降维)、相关性
- 求点到线段的最短距离(QT)
- VS 和 VS Code 更换字体
- net系统安全开发手册
- ac多模式匹配 java_Aho-Corasick 多模式匹配算法、AC自动机详解
- 阿里云盾(云安全)是什么?有什么作用?
- xcode9创建git分支
- [渝粤教育] 上海师范大学 英汉互译 参考 资料
- VMware虚拟机使用总结