python day8:文件操作

能调用方法的一定是对象

文件操作

读文件

open方法

opfile=open('filename.txt')
filetext=opfile.read()

直接显示文件所有内容

注意,若文件内部有中文,这样子会报错,显示gbk无法有效编码,则我们可以把编码方法换成utf8,即

opfile=open('filename.txt',encoding='utf8')
filetext=opfile.read()

close方法

opfile.close()

操作一次文件一定要close一下,尤其是write完!!!因为不close就默认这次操作还没结束,write操作是先删除文章全部内容再把新内容加入,没有close就代表操作未结束,新内容不会加入进文本。

with 方法

with open('filename.txt','r') as f:
    f.readline()

其实等同于 

f=open('filename.txt','r')
f.readline()
f.close()

好处是忘了close也不要紧了 

操作模式

read模式

只可读不可写

opfile=open('filename.txt','r',encoding='utf8')

write模式

在写文件之前,需要让文件变得可写,即

opfile=open('filename.txt','w',encoding='utf8')

再进行操作

opfile.write('wawawawa')

我们会发现写入的内容把之前文件的内容给覆盖了

并且,加入目录下没有所要打开的文件名对应的文件,则会以那个文件名新建一个文件

注意,在第一次write之后,后面继续进行write操作不会覆盖之前的内容了,而是在指针所在位置继续添加。

append模式

防止再打开文件进行write操作时把原内容删除

opfile=open('filename.txt','a',encoding='utf8')

就是write方法把w改成a,a代表append

r+模式

可读可写,但是有个问题:上来字节写入会覆盖原文本相应位置的内容,但是如果是进行read或readline操作后直接就在文本末写入新内容

opfile=open('filename.txt','r+',encoding='utf8')

w+模式

可写可读,但是和w模式一样会把原文清空 

opfile=open('filename.txt','w+',encoding='utf8')

a+模式

可追加写可读,但是一开始指针就放在了最后,所以上来直接读的结果是空的。

opfile=open('filename.txt','a+',encoding='utf8')

操作方法

1. readline

取出第一行内容

print(opfile.readline())

再readline一次 ,取出文件的下一行

因为在操作第一次readline时,指针已经移到文件的第一行末,所以下一次readline从下一行开始

2. read

print(opfile.read())

括号内添加数字,代表从开头字符到指定第几个字符全部读取出来,默认为从头到尾。这里如果进行多次read,下一次read也是从之前位置继续read,这和readline情况相同!

3. readlines

print(opfile.readlines())

 readlines是把文件内文本以换行为界全部切片转为列表

如果用for循环打印opfile.readlines(),会发现打印出来的内容在换行时会多换一行,那是因为print结束之后会默认换行,而readlines中会保留每行文本末的换行符\n,解决方法是在每次循环中用strip()函数来除去每句中的换行符。和read,readline一样,readlines也指针走到哪就在哪读。

但是对于特别大的文件,我们不可能直接把opfile转成readlines再进行循环调用,这样会占用大量内存,一般直接循环opfile。

for i in opfile:
    print(i.strip())

 这样的原理是python把opfile这个文件对象在for循环中做成一个迭代器,循环的时候用一段内容就利用迭代器从源文件里拿一段,这样就不会占内存啦。注意opfile并不是列表

4. tell

我们之前发现不管是读取还是写入,都需要知道指针的位置,tell函数就可以清楚告诉运行时指针所在位置

opfile.tell()

5. seek

opfile.seek()

用于调整光标位置,空格内填光标位置对应的index 

6. flush

之前我们发现在write一个文本之后,除非关闭python,或者close,才能得到被修改的文本,这里flush函数可以来刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。这样也防止了运行时间出现意外导致运行的内容没有写入。

opfile.flush()

7. truncate

 截断(删掉)指定位置之后的所有内容,括号里放删除内容的起始位置的index

opfile.truncate()

truncate在只读'w'模式和’a‘模式下是不一样的,因为‘a’模式是在原文本基础上继续添加的内容,但是truncate在‘a’模式下也会删除原文本的内容
 

作业:高级的三级菜单

和之前字典那一节的作业一样,需要省市县,但是要把数据存在文件内,并且可以自行添加或删除省市县。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值