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的更多相关文章

  1. 《Linux内核设计与实现》第四周读书笔记——第五章

    <Linux内核设计与实现>第四周读书笔记--第五章 20135301张忻 估算学习时间:共1.5小时 读书:1.0 代码:0 作业:0 博客:0.5 实际学习时间:共2.0小时 读书:1 ...

  2. 《Linux内核设计与实现》读书笔记——第五章

    <Linux内核设计与实现>读书笔记--第五章 标签(空格分隔): 20135321余佳源 第五章 系统调用 操作系统中,内核提供了用户进程与内核进行交互的一组接口.这些接口让应用程序受限 ...

  3. perl5 第五章 文件读写

    第五章 文件读写 by flamephoenix 一.打开.关闭文件二.读文件三.写文件四.判断文件状态五.命令行参数六.打开管道 一.打开.关闭文件   语法为open (filevar, file ...

  4. Android群英传笔记——第五章:Android Scroll分析

    Android群英传笔记--第五章:Android Scroll分析 滑动事件算是Android比较常用的效果了,而且滑动事件他本身也是有许多的知识点,今天,我们就一起来耍耍Scroll吧 一.滑动效 ...

  5. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  6. 深入理解 C 指针阅读笔记 -- 第五章

    Chapter5.h #ifndef __CHAPTER_5_ #define __CHAPTER_5_ /*<深入理解C指针>学习笔记 -- 第五章*/ /*不应该改动的字符串就应该用 ...

  7. [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像

    [HeadFrist-HTMLCSS学习笔记]第五章认识媒体:给网页添加图像 干货 JPEG.PNG.GIF有何不同 JPEG适合连续色调图像,如照片:不支持透明度:不支持动画:有损格式 PNG适合单 ...

  8. 《Spring实战》学习笔记-第五章:构建Spring web应用

    之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. ...

  9. o'Reill的SVG精髓(第二版)学习笔记——第五章

    第五章 文档结构 5.1 结构与表现 XML的目标之一便是提供一种能将结构从视觉表示中独立出来的方法. 但是不幸的是,关于XML的很多讨论都强调结构而非表现. 我们将通过详细讨论如何在SVG中指定表现 ...

随机推荐

  1. Kubernetes学习(一)

    一 安装 三台机器搭建K8S集群,一台master两台woker Docker 18.09.0---kubeadm-1.14.0-0 kubelet-1.14.0-0 kubectl-1.14.0-0 ...

  2. 如何更改cmd 编码为UTF-8

    如何将cmd编码改为UTF—8 如图输入chcp 65001即可更改 改完之后是这样的 更改回GBK 输入 CHCP 936即可

  3. 使用H5与webGL的3D 可视化地铁展示

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

  4. Linux基础与搭建

    1 学习目标 了解Linux的简介与安装 掌握Linux常用的命令 掌握Linux系统上JDK.Mysql.Tomcat的安装 2  Linux简介 2.1 Unix简介 Unix是一个强大的多用户. ...

  5. Codeforces_849

    A.只要考虑分成一个串的情况就可以了. #include<bits/stdc++.h> using namespace std; ]; int main() { ios::sync_wit ...

  6. tensorflow feed_dict()

    import tensorflow as tf a=tf.Variable(100) b=tf.Variable(200) c=tf.Variable(300) update1=tf.assign(c ...

  7. CCF_ 201312-2_ISBN号码

    水. #include<cstdio>#include<string>#include<iostream>using namespace std; int main ...

  8. 关于AR眼镜的小结

    根据IDC(International Data Corporation,国际数据公司,IDC是全球著名的信息技术.电信行业和消费科技咨询.顾问和活动服务专业提供商)的报告,2018年AR和VR的产值 ...

  9. OpenCV3入门(八)图像边缘检测

    1.边缘检测基础 图像的边缘是图像的基本特征,边缘点是灰度阶跃变化的像素点,即灰度值的导数较大或极大的地方,边缘检测是图像识别的第一步.用图像的一阶微分和二阶微分来增强图像的灰度跳变,而边缘也就是灰度 ...

  10. Oracle11G DG 搭建及管理

    一.准备工作 环境准备 主数据库Oracle Database安装 备服务器Oracle Database software 安装 二.正式配置 三.基本管理 -------------------- ...