python-----文件操作

一,文件操作的流程

1,打开文件,得到文件句柄并赋值给变量;
2,通过文件句柄对文件进行操作;
3,关闭文件

f=open("file","w")
f.write("123")
f.close()

这种方式是用调用open()和close()函数来实现文件的打开和关闭,但是这样如果程序存在bug,将导致close()语句没有执行,文件未关闭,可能会导致文件中的数据丢失或受损。但如果程序过早的调用了close(),这样在使用文件时会因为他已经关闭而无法使用,将会导致更多的错误。因此我们要用改进的结构:

with open("file","w") as f:
        f.write("123")

二,从文件中读取数据

1,用read()读取文件中指定的字节数。若未指定则表示读取所有。

with open("file","r",encoding=("utf-8")) as f:
        print(f.read())

表示从文件中读取3个字节

with open("file","r",encoding="utf-8") as f:
         print(f.read(3))

2,用readline()读取内容时每次一句一句的读,适用于多内容文件

ith open("file","r",encoding=("utf-8")) as f:
         for i in range(5):  #表示读取5行
                 print(f.readline().strip())  #strip()去掉两边空格

3,用readlines()读取内容时,一次性读出所以内容,将每一句当做列表的元素。适用于小文件

with open("file","r",encoding=("utf-8")) as f:
        print(f.readlines())

第四条语句 不打印。

with open("file","r",encoding=("utf-8")) as f:
        #print(f.readlines())
        for index,item in enumerate(f.readlines()):
                if index==3:
                        continue #终止当前循环,跳出该次循环,执行下次循环
                print(index,item.strip())

注:readline和readlines不能实现协程,程序一旦运行就不能中断。
4,用for循环实现文件读取

with open("file","r",encoding=("utf-8")) as f:
        for i in f:
                print(i.strip())

注:它本身是迭代器方法,可以实现协程,运行过程中可以实现中断。

三,写入文件

1,将“草莓”写入文件中。如果文件不存在,open()将会自动调用,如果文件存在,且里面有数据,则会将原数据覆盖。

with open("file","w",encoding="utf-8") as f:
        f.write("草莓")

2,将“香蕉”追加到文件后面。

with open("file","a",encoding="utf-8") as f:
        f.write("香蕉")

3,r+:先读后写

with open("file","r+",encoding="utf-8") as f:
        f.write("梨")
        print(f.readline())

注:由于先读后写是在原有文本后添加的,读完后类指针已经在文件最末尾了,因此只能读到文件中以前有的,新写的内容不会被读到。如果文件不存在,会报错
4,w+:先写后读

with open("file","w+",encoding="utf-8") as f:
        f.write("梨")
        print(f.readline())

注:先写后读会将文件中原有的全部覆盖,如果文件不存在会调用open()创建新文件。由于读写机制,每次读完或写完,文件中类指针总是指向文件末尾,因此先读的话不会读取到任何内容。添加seek(0)会回到初始位置开始读。

with open("file","w+",encoding="utf-8") as f:
        f.write("梨")
        f.seek(0)
        print(f.readline())

四,对文件的操作

1,seek():用于移动文件读取指针到指定位置。

with open("file","r",encoding="utf-8") as f:
        print(f.readline().strip())
        print(f.read(3))

在这里插入图片描述
注:由于在执行第一条语句时将类指针移动到文件的第二句开头,因此在执行第二条语句时将从文件的第二行开头开始读取。

with open("file","r",encoding="utf-8") as f:
        print(f.readline().strip())
        f.seek(0)
        print(f.read(3))

在这里插入图片描述
注:seek(0)表示将文件的类指针移动到起始位置。
2,fileno():返回一个整形的文件描述符

with open("file","r",encoding="utf-8") as f:
         print(f.fileno())

在这里插入图片描述
3,tell():返回文件指针当前的位置

with open("file","r",encoding="utf-8") as f:
         print(f.tell())

在这里插入图片描述
注:0表示在起始位置。
4,truncate():从指定位置处开始截断字符,有指定大小,则从开始到指定的位置;若没有指定大小,则表示从当前位置至后面的所有字节被删除。

with open("file","r+",encoding="utf-8") as f:
        f.truncate(2)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值