python3-cookbook笔记:第五章 文件与IO
python3-cookbook中每个小节以问题、解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构、函数、类等特性在某类问题上如何更好地使用。这本书对于加深Python3的理解和提升Python编程能力的都有显著帮助,特别是对怎么提高Python程序的性能会有很好的帮助,如果有时间的话强烈建议看一下。
本文为学习笔记,文中的内容只是根据自己的工作需要和平时使用写了书中的部分内容,并且文中的示例代码大多直接贴的原文代码,当然,代码都在Python3.6的环境上都验证过了的。不同领域的编程关注点也会有所不同,有兴趣的可以去看全文。
python3-cookbook:https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html
5.1 读写文本数据
使用open打开文本文件时,Python会默认将换行符转换为\n,如果不想Python进行默认的转换,可以使用参数newline=''以保留原来的换行符。
当使用默认的编码不能正确读取数据时,open还有一个encoding参数用来指定以哪种编码打开文件。
>>> f = open('hello.txt', 'rt')
>>> f.read()
'hello world!\n'
>>> g = open('hello.txt', 'rt', newline='')
>>> g.read()
'hello world!\r\n'
>>>
5.4 读写字节数据
使用open函数的rb或wb进行二进制的数据读写的时候,比如图片或音频数据,需要注意以下几点:
- 读取二进制数据时,返回的数据都是字节字符串格式的,而不是文本字符串格式。
- 写入二进制数据的时候,也需要保证是以字节形式的对象进行写入。
- 在二进制格式的文件中读取或写入文本数据时,需要进行相应的解码和编码操作。
- 对于字节字符串,通过下标索引或迭代的时候,返回的是对应的字节值,即一个数字,而不是字节字符串。
with open('somefile.bin', 'rb') as f:
# 读取出来的是字节字符串
data = f.read()
# 解码为文本字符串
text = data.decode('utf-8') with open('somefile.bin', 'wb') as f:
# 以字节对象的形式写入
f.write(b'Hello World')
# 编码后写入文件
text = 'Hello World'
f.write(text.encode('utf-8'))
>>> t = 'hello world'
>>> t[0]
'h'
>>> for c in t:
print(c) h
e
l
l
o w
o
r
l
d
>>> b = b'hello world'
>>> b[0]
104
>>> for c in b:
print(c) 104
101
108
108
111
32
119
111
114
108
100
>>>
5.7 读写压缩文件
读写压缩文件还是比较常用的,Python对于gzip和bz2格式的压缩文件操作还是有很好的支持的,即gzip模块和bz2模块,这两个模块有和内置open函数一样的函数,包括参数的使用也是一样的,但是需要注意的是这两个模块默认是以二进制来打开的,所以你想要读写文本数据时就需要指定对应的rt和wt模式了。
在写入压缩数据时,这两个模块还有一个压缩比参数compresslevel,默认为最高级别9,等级越低性能越好,但是数据压缩程度也越低。
import gzip # gzip和bz2的open函数使用方法一样,就只贴gzip的实例代码了 # 默认一个二进制模式打开,文本文件需要指定rt模式
with gzip.open('somefile.gz', 'rt') as f:
text = f.read() with gzip.open('somefile.gz', 'wt') as f:
f.write(text)
python3-cookbook笔记:第五章 文件与IO的更多相关文章
- 《Linux内核设计与实现》第四周读书笔记——第五章
<Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...
- 《Linux内核设计与实现》读书笔记——第五章
<Linux内核设计与实现>读书笔记--第五章 标签(空格分隔): 20135321余佳源 第五章 系统调用 操作系统中,内核提供了用户进程与内核进行交互的一组接口.这些接口让应用程序受限 ...
- perl5 第五章 文件读写
第五章 文件读写 by flamephoenix 一.打开.关闭文件二.读文件三.写文件四.判断文件状态五.命令行参数六.打开管道 一.打开.关闭文件 语法为open (filevar, file ...
- Android群英传笔记——第五章:Android Scroll分析
Android群英传笔记--第五章:Android Scroll分析 滑动事件算是Android比较常用的效果了,而且滑动事件他本身也是有许多的知识点,今天,我们就一起来耍耍Scroll吧 一.滑动效 ...
- Programming Entity Framework-dbContext 学习笔记第五章
### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...
- 深入理解 C 指针阅读笔记 -- 第五章
Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_ /*<深入理解C指针>学习笔记 -- 第五章*/ /*不应该改动的字符串就应该用 ...
- [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像
[HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像 干货 JPEG.PNG.GIF有何不同 JPEG适合连续色调图像,如照片:不支持透明度:不支持动画:有损格式 PNG适合单 ...
- 《Spring实战》学习笔记-第五章:构建Spring web应用
之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. ...
- o'Reill的SVG精髓(第二版)学习笔记——第五章
第五章 文档结构 5.1 结构与表现 XML的目标之一便是提供一种能将结构从视觉表示中独立出来的方法. 但是不幸的是,关于XML的很多讨论都强调结构而非表现. 我们将通过详细讨论如何在SVG中指定表现 ...
随机推荐
- 2020 University Rankings US News(亚洲)
2020 University Rankings US News(亚洲)
- truncate table,drop,delete的区别
TRUNCATE TABLE 在功能上与不带 Where 子句的 Delete 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 Delete 速度快,且使用的系统和事务日志资源 ...
- 实验18:HDLC和PPP
实验15-1:HDLC 和PPP 封装 Ø 实验目的通过本实验,读者可以掌握如下技能:(1) 串行链路上的封装概念(2) HDLC 封装(3) PPP 封装 Ø 实验拓扑 实验步骤n ...
- C++反汇编代码分析--函数调用
推荐阅读: C++反汇编代码分析–函数调用 C++反汇编代码分析–循环结构 C++反汇编代码分析–偷调函数 走进内存,走进汇编指令来看C/C++指针 代码如下: #include "stdl ...
- Codeforces_817
A.要求坐标差为移动距离的两倍. #include<bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdi ...
- Spring Boot2 系列教程(三十二)Spring Boot 整合 Shiro
在 Spring Boot 中做权限管理,一般来说,主流的方案是 Spring Security ,但是,仅仅从技术角度来说,也可以使用 Shiro. 今天松哥就来和大家聊聊 Spring Boot ...
- 【Bullet引擎】Bullet物理引擎简单说明
说明 Bullet是一款开源的物理模拟计算引擎,包括刚体.柔体.弹性体等,是世界三大物理模拟引擎之一(包括Havok和PhysX),被广泛应用于游戏开发(GTA5等)和电影(2012等)制作中. Bu ...
- SPH流体模拟及液面重构问题
关于流体特效模拟算法的简单描述,前提部分. 目前动画领域内的流体模拟主要是拉格朗日法无网格法和欧拉网格法,两种方法更有利弊. 我研究的主要是拉格朗日法中的SPH模型,即光滑粒子流体动力学模型. 粒子方 ...
- 编译生成protobuf的jar包
编译生成protobuf的jar包 配置maven 安装maven,并修改maven源为阿里云 下载maven wget http://mirror.bit.edu.cn/apache/maven/m ...
- Django表单Form类对空值None的替换
最近在写项目的时候用到Form,发现这个类什么都好,就是有些空值的默认赋值真是很不合我胃口. 查阅资料.官方文档后发现并没有设置该值的方式.于是,便开始了我的踩坑之路...... 不过现在完美解决了, ...