Python文件进行写操作后立即读出的结果、原因分析、解决方法

  1. 问题引出
with open('***.txt','r+') as f:    #读操作与写操作
    f.write(‘Hello, world!’)    #写入
    cNames = f.readlines()    #读出语句,可用read()也可用readlines(),下表就两种情况进行了区别
    print(cNames)    
读出语句readlinesread
前提准备先新建一个文件***.txt内容为空,否则模式为‘r+’会报错找不到文件同readlines
运行结果与运行次数关系第一次运行,输出结果为空;第二次运行,结果为一个[Hello, World!];第三次运行,结果为[Hello, World!Hello, World!];…;第n次运行,结果为n-1个Hello, World!的列表每次运行结果均为空
文件内容与运行次数关系运行n次,文件中有n个Hello, World!无论运行多少次,文件中只有一个Hello,World!

原因分析:读写时有一个文件指针,数据从文件指针所在位置开始读写。上述程序通过write对文件进行写操作,此时文件指针已经在文件的尾部。

那为什么使用read和readlines会有不一样的运行结果呢?

read()在当前指针处开始读,而当前指针在文件尾部,其后为空,故read()每次运行均为空;写的时候从文件开头写,实行覆盖机制,故不论运行多少次文件内容均为一个Hello,World!

readlines()是回文件开头读取内容,但是刚刚写入的还没有保存故只能读出写入操作之前的文件内容,故readlines()每次运行得到的‘Hello,World!’个数比运行次数少1;写的时候在文件尾部写,故运行多少次,文件内容有多少个Hello,World!

  1. 解决办法

为了解决上述问题,让文件指针指向需要的位置,Python提供了seek()函数
语法:file_obj.seek(offset,whence = 0)
[offset: 偏移量]
[whence: 起始位置 0——文件头部(默认值);1——当前位置;2——文件尾部]

例如: seek(0) # 指针移到文件头部
seek(50,1) #指针向后移动50字节

将seek函数运用于上述代码:

with open('***.txt','r+') as f:    #读操作与写操作
    f.write(‘Hello, world!’)    #写入
    f.seek(0)    #读出前将指针移到文件开头
    cNames = f.readlines()    #文件所有行读出,此处也可以使用read()函数,结果一样
    print(cNames)  

运行结果分析
每一次运行结果均为[Hello, World!]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值