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. Shell脚本深入教程(1):快速入门

    Shell脚本基础入门 Bash注释 Bash只支持单行注释,使用#开头的都被当作注释语句: # 整行注释 echo hello world # 行尾注释 通过Bash的一些特性,可以取巧实现多行注释 ...

  2. 机器学习-NLP之Word embedding 原理及应用

    概述 自然语言是非常复杂多变的,计算机也不认识咱们的语言,那么咱们如何让咱们的计算机学习咱们的语言呢?首先肯定得对咱们的所有文字进行编码吧,那咱们很多小伙伴肯定立马就想出了这还不简单嘛,咱们的计算机不 ...

  3. 【存储类、链接、存储管理】分配内存:malloc()、free()

    一.使用库函数:malloc()分配管理内存 (一)标识符(Identifier) 1. 定义变量时,使用了诸如 a.abc.mn123 这样的名字,它们都是程序员自己起的,一般能够表达出变量的作用, ...

  4. Linux用户在第一次登录时强制更改初始密码

    迫使用户更改密码 如果你想迫使用户更改其密码,请使用下面这个命令. $ sudo chage -d0 <user-name>   最初,“-d <N>”选项应该被设成密码的“有 ...

  5. ATL窗口

    标准的Windows应用程序框架: /*------------------------------------------------------------ HELLOWIN.C -- Displ ...

  6. 使用自环接口的UDP服务器和客户端

    import argparse,socket from datetime import datetime MAX_BYTES = 65535 def server(port): sock = sock ...

  7. Codeforces_451_B

    http://codeforces.com/problemset/problem/451/B 取前后第一个不满足条件的位置,逆序,判断. #include<cstdio> #include ...

  8. ssh_exchange_identification: read: Connection reset

    垃圾服务器,真的佛了,明明服务器从装的系统,连接半天连接不上,但是别人的电脑就可以,要使用xshell和fileshell链接,按照软件报的错误来修复的话,根本解决不了问题,还是得命令行ssh roo ...

  9. SSH: ssh隧道

    简介 Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境.SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接. ...

  10. new 的实现原理

    自己封装一个new <script> // 创建一个构造函数 function Father() { this.name = '小红'; this.eat = function () { ...