Python文件读写(一)

1.概述

Python中内置了文件读写的功能

核心:读写文件其实请求操作系统打开一个文件对象【文件描述符】

2.读文件

步骤:

a.打开文件:open()

b.读取文件内容:read()

c.关闭文件:close()

注意:文件使用完毕之后一定要记得关闭,因为文件对象会占用操作系统的系统资源,并且操作系统在同一个时间段内打开文件的个数是有限制,为了避免资源的浪费

#一、打开文件
"""
open(path,flag[,encoding,errors])
path:文件的路径【绝对路径和相对路径】
flag:打开文件的方式
    r:只读
    rb:以二进制格式打开文件,只读
    r+:读写
    w:只用于写入
    wb:以二进制格式写入文件,如果该文件已经存在则覆盖,如果不存在则创建新的文件
    w+:读写
    a:append,如果一个文件中已经有内容存在,则会将新的内容追加到原有内容的后面
encoding:编码格式,utf-8,gbk
errors:错误处理
"""

path = r"C:\Users\Administrator\Desktop\Python\Day14\致橡树.txt"
#r:用只读的方式打开文件
f = open(path,"r",encoding="gbk")

"""
注意1:当以r的形式打开文件时:
       如果文件格式时gbk的,可以不加encoding = "gbk"
       如果文件格式为utf-8,必须加encoding = "utf-8"

注意2: 二进制格式一般用来处理图片,视频,音频
       如果文件以rb或者wb的形式打开的话,不能添加encoding,会报错
       encode():编码
       decode():解码
"""

#二、读取文件
#1.读取全部内容  ************
#str = f.read()
#print(str)

#2.读取指定的字符数
#如果每一行结尾有个"\n"符号,也被认为是字符
#str1 = f.read(2)
#print(str1)

#3.读取整行,不管该行有多少个字符   **********
#调用一次读取一行,读完一行,则操作文件的光标移动到下一行的开头
#str2 = f.readline()
#print(str2)

#str2 = f.readline(3)  #读取一行中的3个字符
#print(str2)

#4.将所有的内容全部读取出来,返回一个列表,每一行的数据为一个元素
result = f.readlines()
print(result)


#三、关闭文件
f.close()

简写:

path = "致橡树.txt"

#简写方式
#好处:执行完操作之后不需要手动close,避免忘记关闭文件导致资源的浪费
with open(path,"r",encoding="gbk") as f:
    result = f.read()
    print(result)


try:
    f1 = open(path,"r",encoding="gbk")
    print(f1.read())
except FileNotFoundError as e:
    print("文件不存在",e)
except LookupError as e:
    print("指定了未知的编码")
except UnicodeDecodeError as e:
    print("读取文件解码错误",e)
finally:
    if f1:
        f1.close()
3.写文件

步骤:

a.打开文件

b.将信息写入缓存

c.刷新文件内部缓冲【提高写入的效率】

d.关闭文件

注意:如果要写内容的文件不存在的话,会自动创建一个文件

path = "file11.txt"

#IO流

#1.打开文件
f = open(path,"w",encoding="utf-8")

#2.写入内容,将内容写入到缓冲区
f.write("Whatever is worth doing is worth doing well该行很骄傲很关键")


#3.刷新缓冲区【加速数据的流动,保证缓冲区的流畅】
f.flush()

#4.关闭文件
f.close()


#简写方式:可以不用手动调用close
with open(path,"w",encoding="utf-8") as f1:
    f.write("Whatever is worth doing is worth doing well该行很骄傲很关键")
4.编码和解码

字符串类型和字节类型转换过程

​ 字符串类型转换为字节类型:编码,encode

​ 字节类型转换为字符串类型:解码,decode

str = "今天是个好日子 today is a good day"
path = "file22.txt"

with open(path,"wb") as f:
    result = str.encode("utf-8")
    print(result)
    f.write(result)

with open(path,"rb") as f1:
    data = f1.read()
    print(data)
    print(type(data))

    newData = data.decode("utf-8")
    print(newData)
    print(type(newData))
5.拷贝文件
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)

    while size > 0:
        #读取
        content = srcFile.read(1024)
        #写入
        desFile.write(content)

        size -= 1024

    #5.关闭文件
    srcFile.close()
    desFile.close()


myCopy("file11.txt","file22.txt")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值