问题

你想在一个文件里每次读入固定大小的字节,比如每次读入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相关推荐

  1. python每日一题公众号_python每日一题总结4

    20180609 qzd 每日一题14 输入三个整数x,y,z,请把这三个数由小到大输出. my code x=int(input('x:')) y=int(input('y:')) z=int(in ...

  2. python实训名片管理程序_python实现名片管理系统

    ------------------------------------------------------ 想要掌握什么知识,就需要在什么花费时间,浮躁的看,过目即忘,再加上学完了,并不使用,过几天 ...

  3. 利用python和Tushare自动更新A股每日数据

    利用python和Tushare自动更新A股每日数据 tushare ID :423004 所需接口 整体思路为: 1.利用stock_basic获取ts_code,获得沪深全部上市公司股票代码 2. ...

  4. Python也可以很暖男之每日发送爱词霸每日一句+日期+农历+天气预报+各种天气指数(更新)

    Python也可以很暖男之每日发送爱词霸每日一句中英文+日期+农历+天气预报+各种天气指数(只学了一个多月新手的第二个实战项目,代码写的不好,请轻喷,谢谢,有很多网友问为何用不了,因为中国天气网改了代 ...

  5. 名片管理程序Python

    任务二:名片管理程序 1.任务内容:现需制作一个名片管理器程序,能够实现名片的增删改查功能,每张名片主要内容有:姓名.职位.住址.程序若未退出前,则一直循环运行. 代码如下:

  6. [转载] python中for语句用法_详解Python中for循环的使用_python

    参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...

  7. Python基础_第2章_Python运算符与if结构

    Python基础_第2章_Python运算符与if结构 文章目录 Python基础_第2章_Python运算符与if结构 Day02之`Python运算符与if结构` 一.昨日回顾 1.回顾昨天的课程 ...

  8. python数据分析最基本的库_Python数据分析库pandas基本操作方法_python

    下面就为大家分享一篇Python数据分析库pandas基本操作方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 pandas是什么? 是它吗? ....很显然pandas没有这个家伙那么可 ...

  9. python中for语句用法_详解Python中for循环的使用_python

    这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 "探索 Python,第 5 部分:用 Python 编程&q ...

最新文章

  1. 自动驾驶测试:MIL、SIL、PIL、HIL
  2. ESP32模块的MicroPython的基本实验
  3. APPLE:疑问驱动下的学习与实践
  4. 【嵌入式开发】ARM 异常向量表 ( 异常概念 | 异常处理流程 | 异常向量 | 汇编代码 )
  5. Android异步任务机制之AsycTask
  6. Python服务器开发三:Socket
  7. matlab中bwlabel意思,Matlab 里bwlabel 函数的具体含义
  8. linux用u盘上传文件,linux如何挂载U盘和文件系统(或需要用到).doc
  9. Matplotlib 整合与细节操作(样式、图例、风格、轴线、网格)
  10. [再学Python] - 2 - math库和random库
  11. 计算机等级的判断,计算机等级考试一级WPS判断题及答案
  12. 数据科学 第 5 章 主成分分析(降维)、相关性
  13. 求点到线段的最短距离(QT)
  14. VS 和 VS Code 更换字体
  15. net系统安全开发手册
  16. ac多模式匹配 java_Aho-Corasick 多模式匹配算法、AC自动机详解
  17. 阿里云盾(云安全)是什么?有什么作用?
  18. xcode9创建git分支
  19. [渝粤教育] 上海师范大学 英汉互译 参考 资料
  20. VMware虚拟机使用总结

热门文章

  1. 【机器学习】传统目标检测算法之级联分类器Cascade
  2. 网络分流器|运营商光纤延距解决方案
  3. 蒙提霍尔游戏 python 模拟
  4. OpenLayers 官网例子的中文详解
  5. MariaDB 加密特性及使用方法
  6. CSS 选择器优先级与效率优化
  7. Python之Matplotlib画图方法
  8. Linux系统管理(六)
  9. 深入探讨数据仓库建模与ETL的实践技巧
  10. ERROR: cannot launch node of type [turtlebot_teleop/turtlebot_teleop_key] 问题解决