
Python高级编程技巧实战
文章平均质量分 57
RookieFCB
这个作者很懒,什么都没留下…
展开
-
如何在一个for语句中迭代多个可迭代对象
实际案例某班学生期末考试成绩,语文、数学和英语分别存储在3个列表中,同时迭代三个列表,计算每个学生的总分。(并行) 某年级有4个班,某次考试每班英语成绩分别存储在4个列表中,依次迭代每个列表,统计全学年成绩高于90分人数。(串行)原创 2017-07-29 20:20:09 · 349 阅读 · 0 评论 -
如何实现可迭代对象和迭代器对象(二)
之前我们介绍了可迭代对象和迭代器对象,现在我们就实现这两个对象,满足实际案例中的需求原创 2017-07-24 21:15:33 · 209 阅读 · 0 评论 -
如何读写文本文件
实际案例某文本文件编码格式已知(如UTF-8,GBK,BIG5),在Python 2.X和Python 3.X中分别如何读取该文件? 解决方案: - Python 2.X:写入文件前对Unicode编码,读入文件后对二进制字符串编码; - Python 3.X:open函数指定’t’的文本模式,encoding指定编码格式。 注: 字符串的语义发生了变化 P原创 2017-08-10 20:08:51 · 837 阅读 · 0 评论 -
调整字符串中文格式
实际案例某软件的log文件,其中的日期格式为yyyy-mm-dd: …… 2016-05-23 10:59:26 …… 2016-05-23 10:59:26 …… 2016-05-23 10:59:26 …… 2016-05-23 10:59:26 …… …… 我们想把其中的日期改为国外日期的格式mm/dd/yyyy原创 2017-08-04 00:56:44 · 256 阅读 · 0 评论 -
如何设置文件的缓冲
实际案例将文件内容写入到硬件设备时,使用系统调用,这类I/O操作的时间很长。为了减少I/O操作的次数,文件通常使用缓冲区,当有足够多的数据时才进行系统调用。文件的缓冲行为,分为全缓冲、行缓冲和无缓冲。 那么如何设置Python中文件对象的缓冲行为? 解决方案: - 全缓冲:open函数的buffering设置为大于1的整数n,n为缓冲区大小 - 行缓冲:open函数的bufferi原创 2017-08-17 02:02:45 · 564 阅读 · 0 评论 -
如何使用生成器函数实现可迭代对象
实际案例实现一个可迭代对象的类,它能迭代出给定范围内所有素数原创 2017-07-26 23:05:47 · 591 阅读 · 0 评论 -
如何进行反向迭代以及如何实现反向迭代
实际案例实现一个连续浮点数发生器FloatRange(和xrange类似),根据给定范围(start,end)和步进值(step)产生一系列连续浮点数原创 2017-07-27 19:51:36 · 1468 阅读 · 0 评论 -
如何将多个小字符串拼接成一个大字符串
实际案例在设计某网络程序时,我们自定义了一个基于UDP的网络协议,按照固定次序向服务器传递一系列参数原创 2017-08-05 14:46:44 · 3264 阅读 · 0 评论 -
如何处理二进制文件
实际案例WAV是一种音频文件的格式,音频文件为二进制文件。WAV文件由头部信息和音频采样数据构成。前44个字节为头部信息,包括声道数、采样频率和PCM位宽等,后面是音频采样数据。 (注:图片来源于互联网,如若侵权请联系本人立删,谢谢!) 请使用Python分析一个WAV文件头部信息,处理音频数据。 解决方案: - open函数以二进制模式打开文件,指定mode参数为’b’ - 二进制数据原创 2017-08-13 01:37:07 · 677 阅读 · 0 评论 -
如何将文件映射到内存
实际案例在访问某些二进制文件时,希望能把文件映射到内存中,可以实现随机访问(如 framebuffer设备文件); 某些嵌入式设备,寄存器被编址到内存地址空间,我们可以映射/dev/mem某范围,去访问这些寄存器; 如果多个进程映射同一个文件,还能实现进程通信的目的。 解决方案:使用标准库中mmap模块的mmap()函数,它需要一个打开的文件描述符作为参数。 注原创 2017-08-20 02:54:17 · 3079 阅读 · 0 评论 -
如何使用临时文件
实际案例某项目中,我们从传感器采集数据,每收集到1G数据后,做数据分析,最终只保存分析结果。这样很大的临时数据如果常驻内存,将消耗大量内存资源,我们可以使用临时文件存储这些临时数据(外部存储)。 临时文件不用命名,且关闭后会自动删除。 解决方案:使用标准库中tempfile下的TemporaryFile,NamedTemporaryFile。 代码如下: # -*原创 2017-09-05 16:25:07 · 381 阅读 · 0 评论 -
如何访问文件状态
实际案例在某些项目中,我们需要获得文件状态,例如: 文件的类型(普通文件、目录、符号链接和设备文件等); 文件的访问权限; 文件的最后访问、修改和节点状态更改时间; 普通文件的大小; …… 解决方案: - 系统调用:标准库中os模块下的三个系统调用stat,fstat,lstat获取文件状态; - 快捷函数:标准库中os.path下一些函数,使用起来更加简洁。原创 2017-08-28 19:48:17 · 538 阅读 · 0 评论 -
如何实现可迭代对象和迭代器对象(一)
实际案例某软件要求,从网站抓取各个城市气温信息,并依次显示: 北京:15~20 天津:17~22 长春:12~18 …… 如果一次抓取所有城市天气再显示,显示第一个城市气温时,有很高的延时,并且浪费存储空间。我们期望以“用时访问”的策略,并且能把所有城市气温封装到一个对象里,可用for语句进行迭代。那么具体如何解决?原创 2017-07-24 20:17:35 · 1599 阅读 · 0 评论 -
如何判断字符串A是否以字符串B开头或结尾
实际案例某文件系统目录下有一系列文件: quicksort.c graph.py heap.java install.sh stack.cpp …… 编写程序给其中所有.sh文件和.py文件加上用户可执行权限。原创 2017-08-03 00:15:05 · 1404 阅读 · 0 评论 -
如何对迭代器做切片操作
实际案例有某个文本文件,我们想读取其中某范围的内容如100~300行之间的内容,Python中文本文件是可迭代对象,我们是否可以使用类似列表切片的方式得到一个100~300行文件内容的生成器?原创 2017-07-29 20:19:00 · 313 阅读 · 0 评论 -
如何统计序列中元素的出现的频度
实际案例某随机序列[12, 5, 6, 4, 6, 5, 5, 7, …]中,找到出现次数最高的3个元素,它们出现次数是多少? 对某英文文章的单词,进行词频统计,找到出现次数最高的10个单词,它们出现次数是多少?原创 2017-07-23 14:38:05 · 550 阅读 · 0 评论 -
如何对字符串进行左、右和居中对齐
实际案例某个字典存储了一系列属性值原创 2017-08-08 01:34:14 · 1199 阅读 · 0 评论 -
如何实现用户的历史记录功能(最多n条)
实际案例很多应用程序都有浏览用户的历史记录的功能,如: 浏览器可以查看最近访问过的网页; 视频播放器可以查看最近播放过的视频文件; Shell可以查看用户输入过的命令; …… 现在我们制作了一个简单的猜数字的小游戏,添加历史记录功能,显示用户最近猜过的数字,如何实现?原创 2017-07-23 20:33:06 · 4519 阅读 · 0 评论 -
如何让字典保持有序
实际案例某编程竞赛系统,对参赛选手编程解题进行计时,选手完成题目后,把该选手解题用时记录到字典中,以便赛后按选手名查询成绩。(答题用时越短,成绩越优。)如: {‘Li’:(1, 29), ‘Jim’:(3, 36), ‘Jack’:(2, 35), …} 比赛结束后,需按排名顺序依次打印选手成绩,如何实现?原创 2017-07-23 20:31:37 · 1980 阅读 · 0 评论 -
如何快速找到多个字典中的公共键(key)
实际案例德国足球甲级联赛,每轮球员进球统计(数据为虚构): 第一轮:{‘Müller’:1, ‘Robben’:1, ’ Aubameyang’:3, …} 第二轮:{‘Lewandowski’:1, ‘Reus’:2, ‘Wagner’:1, …} 第三轮:{‘Lewandowski’:2, ‘Aubameyang’:2, ‘Werner’:1, …} 统计出前N轮,每场比赛都有进球的球员。原创 2017-07-23 14:44:10 · 1534 阅读 · 0 评论 -
如何根据字典中值的大小,对字典中的项排序
实际案例某班英语成绩以字典形式存储为{‘Li’:79, ‘Jim’:88, ‘Lucy’:92, …},根据成绩高低,计算学生排名。 这里我们将利用内置函数sorted对学生的英语成绩排名。原创 2017-07-23 14:42:28 · 8802 阅读 · 0 评论 -
如何在元组中的每个元素命名,提高程序可读性
实际案例学生信息系统中数据为固定格式:(名字,年龄,性别,邮箱地址,…)如:学生数量很大为了减小存储开销,对每个学生信息用元组表示: (‘Jim’, 16, ‘male’, ‘jim@gmail.com’) (‘Li’, 17, ‘male’, ‘li@163.com’) (‘Lucy’, 16, ‘female’, ‘lucy@qq.com’) …原创 2017-07-23 14:36:40 · 262 阅读 · 0 评论 -
如何在列表、字典和集合中根据条件筛选数据
实际案例在实际开发过程中,常常遇到如下几种情况:过滤掉列表[3, 9, -1, 10, 20, -2, …]中的负数;筛选出字典{‘Jack’:79, ‘Jim’:88, ‘Lucy’:92, …}中值高于90的键值对;筛选出集合{77, 89, 32, 20, …}中能被3整除的元素。故应学会在列表、字典和集合中根据条件筛选数据。原创 2017-07-23 14:35:29 · 753 阅读 · 0 评论 -
如何拆分含有多种分隔符的字符串
实际案例我们要把某个字符串依据分隔符号拆分不同的字段,该字符串包含多种不同的分隔符原创 2017-08-01 21:08:03 · 3492 阅读 · 0 评论 -
如何去掉字符串中不需要的字符
实际案例过滤掉用户输入中前后多余的空白字符:” hello ” 过滤某Windows系统下某编辑文件应用在编辑文本时插入的”\r” 解决方案: - 方法一:字符串strip(),lstrip()和rstrip()方法去掉字符串两端,左边和右边的字符; - 方法二:删除单个固定位置的字符,可以使用切片+拼接的方式; - 方法三:字符串的replace()方法或正则表达式re.su原创 2017-08-10 03:22:59 · 2354 阅读 · 1 评论 -
如何读写csv数据
实际案例http://table.finance.yahoo.com/table.csv?s=000001.sz(该网址已失效) 我们可以通过雅虎网址获取中国股市(深市)数据集,它以csv数据格式存储: Date,Open,High,Low,Close,Volume,Adj Close 2016-06-30,8.69,8.74,8.66,8.70,36220400,8.70 201原创 2017-09-15 16:32:49 · 767 阅读 · 0 评论