标签:gbk vpd 单位 open() odi linux 位移 回车换行 打开
文件操作open() 函数有三个参数: 第一个是文件名字(相对路径)、第二个是模式,模式有 r(只读)、w(写)、a(追加模式)、还有 r+可读可写 、w+可写可读、a+可追加可读 ,第三个是编码,文件存在硬盘实际都是以二进制形式存储,所以不管写和读都要编码解码。*open()方法默认是以系统的编码方式打开*
(windows:GBK 、Linux:UTF-8)
文件修改操作,其实本质就是先文件内容加载到内存,然后修改内存里的内容,再覆盖源文件,所以 用 写模式(w)操作文件要小心,因为覆盖。
ff.read()
是把文件所有一起读出来
ff.readline()
是一行一行的读文件:
ff.readlines()
是把所有文件内容读出来,以列表(list)形式打包:
ff.flush()
刷新。写数据的时候,程序没运行完,数据不会更新到文件上,这个函数可以在程序没运行完的时候 同步到文件。
b模式就是以原生二进制方式读取文件内容。用了b模式不能在代码里指定编码。
打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 之追加写模式【不可读;不存在则创建;存在则只追加内容】
#2. 对于非文本文件,只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb
wb
ab
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
windows平台回车换行有两个字符 \r \n 如下图:
b模式下还原字符串,打印的时候加解码:
b模式写入数据:
ff.write(‘此情无计可消除\n‘.encode(‘utf-8‘))
ff.write(bytes(‘雁字回时,月满西楼\n‘,encoding=‘utf-8‘))
tell()
方法是捕获光标位置,readlines方法全部内容读完,光标在22位置,一个汉字占3个字节,加上回车键两个字节(\r\n),这里没显示\r是因为python自动优化了,加上newline=‘‘
就可以看到。
一: read(3):
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate
注意:
1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果
下图 ff.seek(1)
代表光标移动1个字节,由于文档开头是汉字,一个汉字占三个字节,这相当于在一个汉字中间开始读起,那就报错。
seek() 有3个参数 :第一个参数 代表 是移动光标 多少个字节。 第二个参数默认是0,可以输入1,代表是每次移动光标都以当前位置为基础再移动,如下图:
注:要用后面两个参数,打开文件必须以b模式
使用第三个参数,表示倒序移动光标,如图:
倒序要用负数,参数为2
ff.read(4)
表示读4个字符 (read() 方法是以字符为单位读取)
ff.truncate(14) 表示截取14个字节,注意:任何模式都可以使用 ,除了 w 或者 w+ 模式 ,因为 w模式打开文件就会覆盖为空。
标签:gbk vpd 单位 open() odi linux 位移 回车换行 打开
原文地址:https://blog.51cto.com/11533525/2391861