python读取文件时 wb,python文件读写模式 --- r,w,a,r+,w+,a+,rb,wb

要了解文件读写模式,需要了解几种模式的区别,以及对应指针

r : 读取文件,若文件不存在则会报错

w: 写入文件,若文件不存在则会先创建再写入,会覆盖原文件

a : 写入文件,若文件不存在则会先创建再写入,但不会覆盖原文件,而是追加在文件末尾

rb,wb:分别于r,w类似,但是用于读写二进制文件

r+ : 可读、可写,文件不存在也会报错,写操作时会覆盖

w+ : 可读,可写,文件不存在先创建,会覆盖

a+ :可读、可写,文件不存在先创建,不会覆盖,追加在末尾

注意:这里的覆盖是指每次重新打开文件进行操作时覆盖原来的,如果是在打开文件中则不会覆盖

---------------------

作者:07151012

来源:CSDN

原文:https://blog.csdn.net/qq_32648375/article/details/83342094

版权声明:本文为博主原创文章,转载请附上博文链接!

#打开文件进行操作

with open("a.txt","w") as file:

file.write("123")

file.write("456")#结果为 123456 虽然w操作模式会进行覆盖,但是此时没有

#再次打开文件进行操作

with open("a.txt","w") as file:

file.write("123")#结果为 123 此时才是覆盖原来的a.txt

读、写操作时候涉及到指针

指针相关的函数有:seek(x[,y]),x设置指针的位置,y(=0开头,=1中间,=2末尾)

tell(),查询指针的位置

指针注意点:1.每次打开文件默认指针是在开头的,可以通过seek()来设置指针的位置进行读写操作

2. 每次操作都是从当前指针指向位置向后进行读写

例如:使用w模式(覆盖模式)进行写入时,指针会从头开始,写入完,指针指向最后

with open("a.txt","w") as file:print(file.tell()) //0,写入前指针为0

file.write("123") //写入123print(file.tell()) //3,写入后指针变为3#a.txt为123

#重新打开同一个a.txt文件

with open("a.txt","w") as file:print(file.tell()) //0,写入前指针为0

file.write("456") //写入456print(file.tell()) //3,写入后指针变为3#a.txt为456

再来看看a模式(非覆盖模式)

with open("b.txt","a") as file:print(file.tell()) //0,写入前指针为0

file.write("123") //写入123print(file.tell()) //3,写入后指针变为3#b.txt为123

#重新打开同一个b.txt文件

with open("b.txt","a") as file:print(file.tell()) //3,写入前指针为3

file.write("456") //写入456print(file.tell()) //6,写入后指针变为6#b.txt为123456

所以只要知道指针的起始位置以及最后位置,就能知道文件读取的内容

再来了解一下有关于文件读的时候

read([value]):value为设置内容读取的长度

举个例子(与指针结合起来看)

#首先我先创建一个a.txt文件,内容为12345678

with open("a.txt","r") as file:

content= file.read(3) //读取长度为3

next_content= file.read() //第二次读取print(content) // 123

print(next_content) // 45678

#为什么第二次读取的时候结果会是45678呢?#在同一个打开文件中,因为第一次读取完,指针指向了3,所以再次读取时候,从指针3开始读取

再来将seek()函数引入,相同例子

#首先我先创建一个a.txt文件,内容为12345678

with open("a.txt","r") as file:

content= file.read(3)

file.seek(1) //设置指针位置为1

next_content= file.read() //第二次读取print(content) // 123

print(next_content) // 2345678

#由于seek设置了指针为2,所以第二次读取时候,从指针为2出进行读取了

文件读的操作相关还有readline,readlines,for in遍历

顾名思义 readline就是读取一行,readlines就是读取所有行

文件较大时,可以用readline或for in 遍历,节省内存,但是性能低

文件较大时,可以用read,readlines一次性处理,占用内存大,但是性能高

看了一下几个例子就能理解了:

#先创建一个多行的txt文件

a.txt:123

456

#for in 方法

with open("a.txt","r") as file:for i infile:print(i,end="") //由于每行末尾默认带有换行符,所以end=""设置一下输出样式// 结果为 123

465

#readline 方法:每次读取一行

with open("a.txt","r") as file:

content=file.readline()print(content,end="") //123content1=file.readline()print(content1,end="") //456

#readlines 方法

with open("a.txt","r") as file:

lines= file.readlines() //读取每一行for line in lines: //遍历取出每一行print(line,end="")// 结果为 123

465

以上内容来源于 https://blog.csdn.net/qq_32648375/article/details/83342094

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值