Python之文件读写(概述,读文件,写文件,编码和解码,练习【需求:文件内容的拷贝】)

概述

Python中内置了文件读写的功能,现代的系统不允许普通的程序直接访问磁盘,所以,读写磁盘上的文件首先会请求打开一个文件的对象【也被称为文件描述符】,然后,通过系统提供的功能就可以读写文件

 读文件(过程和使用)

  • 过程:a.打开文件:open();b.读取文件内容:read();c.关闭文件:close()。说明:文件使用完毕之后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统在同一个时间段内打开的文件是有限的
  • 使用:
    > open(path,flag[,encoding,errors]),例如:f = open("致橡树.txt","r",encoding = "gbk")
    > path:需要读取的文件的路径【相对路径和绝对路径】
    > flag:打开方式
    >     r:只读的方式打开,注意:读取的文件必须存在
    >     rb:以二进制的形式打开一个文件,用于只读,注意:读取的文件必须存在  
    >     r+:打开一个文件用于读写,注意:读取的文件必须存在
    >     w:只能写入内容,注意:如果该文件存在则覆盖,如果不存在则会自动创建
    >     wb:以二进制的方式打开一个文件,用于写入,注意:如果该文件存在则覆盖,如果不存在则会自动创建
    >     w+:打开一个文件用于读写,注意:如果该文件存在则覆盖,如果不存在则会自动创建
    >     a:打开一个文件,向其中追加内容
    >     说明:rb和wb 表示使用二进制的形式打开文件,主要用来打开多媒体资源【图片,视频,音频等】
    > encoding:编码格式,可写可不写
    > errors:错误处理,可写可不写
    > #注意:encoding一般使用关键字参数传参;打开文件的时候采用的编码格式必须和文件本身的编码格式一致,否则出现乱码
  1. 打开文件

    当使用r的方式打开文件的时候,后面的encoding可加可不加。如果文件的格式为gbk,则可不加;如果文件的格式为utf-8的,最好加上encoding = "utf-8"

    当使用rb/wb的方式打开文件的时候,后面的encoding不添加

  2. 读取文件内容
    f = open("youbian.txt","r",encoding = "utf-8")
    
    #1.一次性读取文件的全部内容
    str1 = f.read()
    print(str1)
    
    #2.读取指定字符数。如果不指定参数,则一次性读取全部的内容,如果指定参数,以字符串返回指定数量的数据,且每一行的结尾都有一个换行符"\n"
    str2 = f.read(5)
    print(str2)
    
    #3.读取整行,不管一行有多少个字符,一次性读取一行,以"\n"作为参照进行换行
    str3 = f.readline()
    print(str3)
    
    #4.读取一行中前指定的字符
    str4 = f.readline(3)
    print(str4)
    
    #5.读取所有行并返回列表,显式的出现\n
    str5 = f.readlines()
    print(str5)

     

  3. 关闭文件:f.close()

写文件 (过程和使用)

  • 过程: a.打开文件:open(); b.将数据写入缓存:write();c.刷新文件内部缓存:flush();d.关闭文件:close()。向一个文件中写入内容,文件可以不存在,会自动创建
  • 使用:
    > path = "youbian.txt"
    > #1.打开文件   wb   a    ,其中w表示将原来的内容全部替换,a表示在文件末尾进行追加
    > f = open(path,"a",encoding="gbk")                     #注意:w表示将原来的内容全部替换,a表示在文件末尾进行追加
    > #2.写入数据
    > f.write("hello写入文件的数据需要换行的话")          #注意:如果写入文件的数据需要换行的话,则需要手动添加\n
    > #3.刷新缓冲区【加速数据的流动,保证缓冲区的畅通】
    > f.flush()             #      直接将内部缓冲区的内容立刻写入文件,而不是被动的等待自动刷新写入
    > #4.关闭文件
    > f.close()

编码和解码 

字符串类型和字节类型之间的转换

字符串类型转换为字节类型:编码【encode】,utf-8:存储中文3个字节,gbk:存储中文2个字节

字节类型转换为字符串类型:解码【decode】

#新建一个file.txt文件
path = r"file.txt"

#编码:字符串——>字节
with open(path,"wb") as f1:
       s1 = "today is a good day"
       f1.write(s1.encode("utf-8"))
       f1.flush()

#解码:字节——>字符串
with open(path,"rb") as f2:
       data =f2.read()
       print(data)           #b'today is a good day'
       print(type(data))        #<class 'bytes'>

       newData = data.decode("utf-8")
       print(newData)        #today is a good day

注意:保证设置的编码格式和文件的编码格式相符,否则出现乱码

练习 (需求:文件内容的拷贝)

import os
def myCopy(srcPath,desPath):
       #1.判断源文件是否存在
       if not os.path.exists(srcPath):
              print("源文件不存在")
              return
       #2.判断源文件路径是否是文件
       if not os.path.isfile(srcPath):
              print("源路径是文件夹,不是文件")
              return
       #3.打开文件
       srcFile = open(srcPath,"rb")
       desFile = open(desPath,"wb")
       #4.获取源文件的大小
       size = os.path.getsize(srcPath)
       #5.循环读取文件,并将读取出来的内容写到目标文件中
       while size > 0:
              content = srcFile.read(1024)
              desFile.write(content)
              desFile.flush()
              size -= 1024
       #6.关闭文件
       srcFile.close()
       desFile.close()

srcPath = "youbian.txt"
desPath = "file.txt"
myCopy(srcPath,desPath)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值