• Python中文件操作(IO流)及文件备份


    IO流主要作用与计算机中的输入与输出操作,一般来说,常见的IO流操作是内存和磁盘之间的输入和输出,它是一种持久操作,将数据持久化在磁盘上

    在计算机中,它只能识别0和1,因此我们的文本文件要被计算机识别并存储在硬盘中需要我们利用编码技术将内容翻译成0和1存入。在计算机中有许多编码:UTF-8、GBK、Big5等等,不同的编码,对于相同的内容翻译成的二进制也不相同

    UTF-8为目前全球通用的编码格式

    文件的读取

    在Python中使用open函数可以打开一个已存在的文件或者创建一个新文件

    语法:open(name,mode,encoding)

    name:目标文件名的字符串或者是文件所在的具体路径

    mode:打开文件的模式

    encoding:编码格式

    f = open("a.txt","w",encoding="UTF-8")

    注意:encoding的顺序位置不是第三位,所以不能使用位置参数,需要用关键字参数指定

    在open函数中有三种基础访问模式即mode,分别为r、w、a

    r:以只读方式打开文件,其文件指针放在开头(默认模式)

    w:以只写方式打开文件,如果文件已存在则打开文件并且从头开始编辑文件,原有内容会被删除,若果文件不存在则会创建一个新文件

    a:以追加方式打开文件,如果文件已存在则会在原有内容后添加新内容,如果文件不存在则会创建一个新文件进行写入

    read()方法

    语法:文件对象.read(num)

    num表示要从文件中读取的长度,单位为字节,如果没有num则表示读取文件中所有数据

    1. f = open("a.txt","r",encoding="UTF-8")
    2. print(f"读取十个长度:{f.read(10)}")

    读取十个长度:hello word

    但是需要注意的是,当重复读取时,它不会从头开始读取,而是从上次读取位置开始

    1. f = open("a.txt","r",encoding="UTF-8")
    2. print(f"读取十个长度:{f.read(10)}")
    3. print(f"读取十个长度:{f.read(10)}")

    读取十个长度:hello word
    读取十个长度:!
    python
    p

    readlines()方法

    按照行的方式将文件中的内容进行一次性读取,返回值为列表,文件中的每一行数据为一个元素

    1. f = open("a.txt","r",encoding="UTF-8")
    2. print(f"内容为:{f.readlines()}")

    内容为:['hello word!\n', 'python\n', 'pycharm']

    readline()方法

    一次性读取一行内容

    1. f = open("a.txt","r",encoding="UTF-8")
    2. print(f"第一行:{f.readline()}")
    3. print(f"第二行:{f.readline()}")

    第一行:hello word!

    第二行:python

    for循环读取文件行

    1. f = open("a.txt","r",encoding="UTF-8")
    2. for i in f:
    3. print(f"每一行数据为:{i}")

    每一行数据为:hello word!

    每一行数据为:python

    每一行数据为:pycharm

    close()关闭文件对象

    在读取文件后需要关闭文件对象

    通过close()方法关闭文件,如果不关闭文件,会导致文件一直被Python程序占用

    1. f = open("a.txt","r",encoding="UTF-8")
    2. f.close()

    文件的写入

    首先需要将文件打开模式改为w

    write()方法

    直接调用write()方法后并不会直接写入文件,而是会先在程序的内存中即缓冲区

    在程序运行后,文件内容会清空即为内容,但是在程序运行中时,write()中的内容并不会写入,只有在程序运行完后write()中的内容才会写入

    因此我们想要在程序运行中就将write()中的内容写入就需要使用flush()方法

    1. import time
    2. f = open("a.txt","w",encoding="UTF-8")
    3. f.write("1111111")
    4. time.sleep(100000)

    flush()方法

    flush()为内容刷新,在write()方法使用后调用flush()会将缓冲区中的内容写入文件中

    1. import time
    2. f = open("a.txt","w",encoding="UTF-8")
    3. f.write("1111111")
    4. f.flush()
    5. time.sleep(100000)

     文件的追加

    如果文件存在则在文件原有内容后追加内容

    1. f = open("a.txt","a",encoding="UTF-8")
    2. f.write("\n2222222")
    3. f.flush()
    4. f.close()

    补充

    IO操作字节数据:将mode改为rb或wb

    字节可以操作任何数据,字符只能操作字符数据

    1. f = open("1.jpg","rb")
    2. print(f.read())

    注意:字节流操作大数据时,不建议一次性读取

    文件备份

    字符流读到最后返回“”,字节流读到最后返回b“”

    简易版:

    1. def copy(src,dest):
    2. f1 = open("src","rb")
    3. f2 = open("dest","wb")
    4. f2.write(f1.read())

    优化版:

    1. from os import path
    2. import uuid
    3. def copy(src,dest):
    4. src = input("请输入你要备份的数据路径:")
    5. dest = input("请输入你要保存的数据路径:")
    6. f1 = open("src","rb")
    7. filename = src[src.rfind("\\")+1:]
    8. f2 = open(path.join(dest,filename),"wb")
    9. while True:
    10. #以M为单位读取数据
    11. date = f1.read(1024*1024)
    12. if date == b"":
    13. print("数据备份完成")
    14. break
    15. else:
    16. f2.write(date)
    17. f1.close()
    18. f2.close()

  • 相关阅读:
    XTU-OJ 1331-密码
    脑供血不足是怎么回事?
    远程运维如何更高效的远程管理?向日葵的这几项功能会帮到你
    Luatos Air700 改变BL0942串口波特率
    iNFTnews | Meta在元宇宙中的后续计划会是什么?
    【毕业设计源码】基于微信小程序的查寝系统的设计与实现
    机器人中的数值优化(七)——修正阻尼牛顿法
    Onein Lab | 万应低代码实践指南,从0到1构建新能源汽车电商平台
    评估指标与评分(上):二分类指标
    Payhawk在纽约开设办事处并推出美国信用卡
  • 原文地址:https://blog.csdn.net/Thewei666/article/details/126551415