栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python文件操作中的坑

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python文件操作中的坑

r模式下只能读 ,文件不存在就报错,不存在覆盖问题

with open('login-info.txt',encoding='utf-8',mode='r') as f:
    t=f.read()
    print(t)

正常输出:

文件不存在就报错

r+模式下可读可写,文件不存在就报错,写文件的时候它是会覆盖前面的内容

with open('login-info.txt',encoding='utf-8',mode='r+') as f:
    t=f.read()
    print(t)

正常输出:

文件不存在就报错

w模式下,只能写,如果文件不存在就创建, 写文件的时候它是会覆盖前面的内容

with open('l.txt',encoding='utf-8',mode='w') as f:
    f.write('666')

可以看到正常写:

注意的是.只能写入字符串,写入数字会直接报错,就算你使用bytes模式.也得将666转成bytes类型

a模式下,只能写,如果文件不存在就创建,不会覆盖,会在文件末尾追加

with open('l.txt',encoding='utf-8',mode='a') as f:
    f.write('555')
    f.write('444')
    f.write('111')

可以看到:

当然你也可以加’n’来进行换行

a+模式下,只能写,如果文件不存在就创建,不会覆盖,会在文件末尾追加
这里有个坑:
在Python中读取文本使用a+模式打开文本文件,直接读取文件返回的数据为空,
原因是因为read方法取到的是光标之后的数据,而a+是追加文本,光标默认在最后,所以取到的数为空
解决方法:
需要使用f.seek(0),将光标移动到下标为0的位置后,再使用f.read()方法就可以取到全部数据。

还是刚才这个文件

with open('l.txt',encoding='utf-8',mode='a+') as f:
    t=f.read()
    print(t)



你会发现,你什么都读不出来.你会疑惑,因为文件里明明有东西.这就是光标的问题了!
因为a+模式下,光标在末尾,他是末尾追加模式,而读文件是从光标的位置开始,往后面读,但是后面没有内容了.所以就是空
解决方法也很简单,将光标移动到你想读的地方就好了
比如:

with open('l.txt',encoding='utf-8',mode='a+') as f:
    f.seek(0)
    t=f.read()
    print(t)

运行截图:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号