python二进制文件的读取与写入方法-Python——文件读取与写入

打开方式

指针位置

读取的文件类型

r

只读(默认模式)

指针在文件开头,文件不存在则报错

1. 默认读取文件都是ASCII编码的文本文件

2. 如果读取的文件是二进制文件,如图片,视频需要使用"rb"模式

3. 读取非ASCII编码的文本文件,必须 以二进制模式打开,再解码

f=open("E:/test.txt","rb")

f.read().decode("gbk")

rb

二进制格式只读

指针在文件开头,文件不存在则报错

r+

可读可写

指针在文件开头,文件不存在则报错

rb+

二进制格式可读可写

指针在文件开头,文件不存在则报错

w

只写

文件存在,则覆盖;不存在,则创建

wb

二进制格式只写

文件存在,则覆盖;不存在,则创建

w+

可读可写

文件存在,则覆盖;不存在,则创建

wb+

二进制格式可读可写

文件存在,则覆盖;不存在,则创建

a

追加

文件存在,指针在文件尾增加;不存在,则创建

ab

二进制格式追加

文件存在,指针在文件尾增加;不存在,则创建

a+

可读可写

文件存在,指针在文件尾增加;不存在,则创建

ab+_

二进制格式可读可写

文件存在,指针在文件尾增加;不存在,则创建

二、文件打开方法

举例

文件不存在

是否需要调用close()方法

注意

Python内置open函数

f=open("E:/test.txt","r")

文件不存在则会IOError

必须书写调用close()

1.文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也有限

2.当写文件时,操作系统不会立刻将数据写入磁盘,而是放内容缓存,空闲时再写入,只有调用close()方法时,操作数据才会将没有写入的数据写入磁盘。不写close()方法有可能只写了一部分数据到磁盘,剩下的数据丢失了

3.文件不存在,可以用try…finally避免,但与with比较麻烦

With语句

with open("E:/test.txt","r") as f:

文件不存在则会IOError

with语句自动调用close()方法

三、文件读写定位操作

方法

用法

注意

f.read(size)

如果没有size即f.read()一次性读取文件全部内容,返回类型str;如果有size即f.read(50)读取最多的字节内容

1.文件很小,可一次性读取,文件较大,超过内存大小,内容爆掉

2.文件过大,可用f.read(size),x为每次最多读取size字节的内容

3.如果是配置文件,调用readlines()最方便

f.readline()

每次读取一行内容,返回类型str

f.readlines()

一次读取所有内容并按行返回list

f.write()

写文件

将字符串写入文件,如果写入结束,需要在字符串后面加上" "

定位

f.seek(offset,from_what)

f.seek(2,0)读取位置向后移动2个字符

from_what值为文件的开始位置,可以省略;offset为偏移量

当前位置

f.tell()

f.tell(),返回当前文件位置

四、读取非ASCII文件,如utf-8,gbk类型

方法1:读取时指定类型encoding="utf-8"

with open("E:/test1.txt","r",encoding="utf-8") as f

print(f.read())

结果:

你好

方法2:

必须:1.以二进制模式打开,再解码

codecs模块:读文件时自动转换编码,直接读出unicode

import codecs

with codecs.open("E:/test.txt","rb","utf-8") as f:

f.read()

注意:有些编码不规范,会遇到UnicodeDecodeError,可能文件中有些非法编码的字符,遇到这种情况,可用open()函数可以接收errors参数,表示如果遇到编码错误后如何 处理,最简单方式是直接忽略f=open("E:/test1.txt","r",encoding="gbk",errors="ignore")

五、File对象的属性

f.closed

文件已关闭返回true,否则返回false

f.mode

返回被打开文件的访问模式

f.name

返回文件名称

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值