文件操作
本节导读
- 操作文件的步骤
- 打开文件
- 操作文件
- 关闭文件
- 注意事项
一操作文件时要经历如下步骤:
- 打开文件
- 操作文件
- 关闭文件
一、打开文件
打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。
文件句柄 = open('文件路径', '模式')
打开文件的模式有:
- r ,只读模式【默认】
- w,只写模式【不可读;不存在则创建;存在则清空内容;】
- x, 只写模式【不可读;不存在则创建,存在则报错】
- a, 追加模式【不可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+, 读写【可读,可写】 覆盖前文,从开始向后读末尾追加,指针移动到最后
- w+,写读【可读,可写】 先清空,再写,再读写的内容,一写指针就到最后
- x+ ,写读【可读,可写】 先清空,再写,再读写的内容,一写指针就到最后 文件存在即报错
- a+, 写读【可读,可写】 打开的同时已经把指针移动到最后了
"b"表示以字节的方式操作
- rb 或 r+b
- wb 或 w+b
- xb 或 w+b
- ab 或 a+b
- 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型
注意:
- r与r+的区别
r只读,r+读写,不创建
w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出。w+可读写)
- w+与r+区别:
r+:可读可写,若文件不存在,报错;w+: 可读可写,若文件不存在,创建
二 文件操作
for line in f: #循环文件 f.read() #读取文件,可读模式下可用,按字符查找,读取时可以指定读取多少字符 readline() #只读一行 ,遇到\r or \n为止 f.write() #写入数据,可写模式下可用 f.tell() #查看指针当前位置 f.seek() #跳转指针到该位置处 #注意 tell,seek按字节查找,通过tell()保存指针位置, 再通过seek()打开保存的指针位置, 在做日志增量分析时非常有用
fileno() #返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到 flush(): #把文件从内存buffer里强制刷新到硬盘 readable() #判断是否可读 seekable() #判断是否可进行seek操作 truncate() #按指定长度截断文件 ,指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。 writeable() #判断文件是否可写
三 关闭文件
- f.close()
- with open("ha1.log","r+",encoding="utf-8") as f:
可以不用写f.close() Python自动关闭
可以同时打开两个文件(@2.7之后的版本) with open("源文件","r+",encoding="utf-8") as f,open("新文件","r+",encoding="utf-8") as f: 优化内存,文件太大,可以通过这个方式
注意
- 不知道编码,rb,用于网络传输等不给人看的方
- 不知道编码,用二进制模式rb,用于网络传输等不给人看的方式
- 不知道要处理的文件编码是什么,用chardet模块,尝试判断字符编码
- 写入的数据,会短暂的在内存停留,到达一定的量才存到硬盘,以此来提高运行速度
- 修改数据,文件开始和结束的位置确定,不可以改变,修改可能会让某些字符乱码