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中指定表现 ...
随机推荐
- asp.net core 3.x 身份验证-2启动阶段的配置
注册服务.配置选项.添加身份验证方案 在Startup.ConfigureServices执行services.AddAuthentication() 注册如下服务(便于理解省略了部分辅助服务): s ...
- fgets汉字问题
#include<stdio.h> #include <stdlib.h> #define N 10 int main(int argc, char *argv[]) { FI ...
- selenium高级应用 - 结束Windows中浏览器的进程
结束Windows中浏览器的进程 #-*- coding:utf-8 #结束Windows中浏览器的进程 from selenium import webdriver import unittest ...
- 从零开始学习redis源码
2020的开年是比较艰难的,爆发了肺炎疫情,希望大家多注意安全,也希望疫情早日好转! 以3.2版本的源码为例,开始讲解,有时会贴出源码,进行说明,并会注明源码出处. 数据库 应该都知道默认redis会 ...
- Codeforces_803
A. 填k个1,使矩阵主对角线对称,相同情况选择上面1数量多的. #include<bits/stdc++.h> using namespace std; ][] = {}; int ma ...
- WeChall_Prime Factory (Training, Math)Training: WWW-Robots (HTTP, Training)
In this little training challenge, you are going to learn about the Robots_exclusion_standard.The ro ...
- 2020牛客寒假算法基础集训营4 E:最小表达式
E:最小表达式 考察点 : 贪心,高精度 坑点 : 高精度一定不要写错,一定一定不要写错 剩下的就是细节问题 侃侃 : 1.字符串长度达到 5e5,如果要涉及到加法,乘法,普通的肯定会爆 long l ...
- json-server的简单使用
json-server是一个在前端本地运行,可以存储json数据的server(服务器),该服务器只支持 get 方法获取,不支持 post 方法获取,使用express工具可以使用post方法. V ...
- php 全局变量 预定义变量
//$GLOBALS 引用全局作用域中可用的全部变量 $_SERVER['SERVER_ADDR'] 返回运行脚本所在服务器的IP地址 $_SERVER['SERVER_NAME'] 返回运行脚本所在 ...
- python 处理10000个txt,每个文件夹里面放1000个。
fileNumberInDiretory = 1000 title_list = getChongFuTitle(cursor) DiretoryNums = math.ceil(len(title_ ...