温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用python实现文件备份

发布时间:2022-02-07 15:55:10 来源:亿速云 阅读:161 作者:iii 栏目:开发技术

这篇文章主要介绍“怎么用python实现文件备份”,在日常操作中,相信很多人在怎么用python实现文件备份问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用python实现文件备份”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    1、需求

    用户输入当前目录下任意文件名,程序完成对该文件的备份功能。

    备份文件名为xx[备份]后缀,例如:test[备份].txt

    2、步骤

    接收用户输入的文件名。规划备份文件名。备份文件写入数据。

    3、代码实现

    (1)接收用户输入目标文件名

    old_name = input('请输入您要备份的文件名:')

    (2)规划备份文件名

    2.1 提取目标文件后缀。
    2.2 组织备份的文件名,xx[备份]后缀。

    # 2.1 提取文件后缀点的下标
    index = old_name.rfind('.')
    
    # 2.2 组织新文件名 旧文件名 + [备份] + 后缀
    new_name = old_name[:index] + '[备份]' + old_name[index:]

    (3)备份文件写入数据

    3.1 打开源文件 和 备份文件。
    3.2 将源文件数据写入备份文件。
    3.3 关闭文件。

    # 3.1 打开文件
    old_f = open(old_name, 'rb')
    new_f = open(new_name, 'wb')
    
    # 3.2 将源文件数据写入备份文件
    # 如果不确定目标文件大小,循环读取写入,
    # 当读取出来的数据没有了终止循环
    while True:
        # 每次在原文件中读取的内容
        con = old_f.read(1024)
        # 表示读取完成了
        if len(con) == 0:
            # 终止读取
            break
    
        # 新文件写入读取的数据
        new_f.write(con)
    
    # 3.3 关闭文件
    old_f.close()
    new_f.close()

    (4)思考

    如果用户输入.txt,这是一个无效文件,程序如何更改才能限制只有有效的文件名才能备份?

    答:添加条件判断即可。

    # 有文件名,才能提取后缀
    # 这里无法取得后缀,拼接的时候没有后缀的变量
    # 就会报错
    if index > 0:
        postfix = old_name[index:]

    (5)完整编码

    1)传统实现

    # 1. 用户输入目标文件  如:sound.txt.mp3
    old_name = input('请输入您要备份的文件名:')
    
    # 2. 规划备份文件的名字
    # 2.1 提取后缀 --
    # 找到名字中的最右侧的点才是后缀的点
    # 在右侧查找rfind()方法
    # 获取文件全名中后缀.的位置
    index = old_name.rfind('.')
    
    
    # 4. 思考:有效文件才备份 .txt
    if index > 0:
        # 提取后缀,这里提取不到,后面拼接新文件名字的时候就会报错
        postfix = old_name[index:]
    
    # 2.2 组织新名字 = 原名字 + [备份] + 后缀
    # 原名字就是字符串中的一部分子串 -- 切片[开始:结束:步长]
    # new_name = old_name[:index] + '[备份]' + old_name[index:]
    new_name = old_name[:index] + '[备份]' + postfix
    
    
    # 3. 备份文件写入数据(数据和原文件一样)
    # 3.1 打开 原文件 和 备份文件
    old_f = open(old_name, 'rb')
    new_f = open(new_name, 'wb')
    
    # 3.2 原文件读取,备份文件写入
    # 如果不确定目标文件大小,循环读取写入,当读取出来的数据没有了终止循环
    while True:
        # 每次在原文件中读取的内容
        con = old_f.read(1024)
        # 表示读取完成了
        if len(con) == 0:
            # 终止读取
            break
    
        # 新文件写入读取的数据
        new_f.write(con)
    
    # 3.3 关闭文件
    old_f.close()
    new_f.close()

    2)实际工作实现

    # 1. 用户输入目标文件  如:sound.txt.mp3
    old_name = input('请输入您要备份的文件名:')
    
    # 获取文件全名中后缀.的位置
    index = old_name.rfind('.')
    
    # 4.有效文件才备份 .txt
    if index > 0:
        postfix = old_name[index:]
    
    # 3.开始备份文件
    # 打开原文件
    with open(old_name , 'rb') as file_obj:
        # 组织新名字 = 原名字 + [备份] + 后缀
        new_name = old_name[:index] + '[备份]' + postfix
    
        # 创建并打开新文件
        with open(new_name, 'wb') as new_obj:
            # 定义每次读取的大小
            chunk = 1024 * 100
    
            while True:
                # 从已有的对象中读取数据
                content = file_obj.read(chunk)
    
                # 内容读取完毕,终止循环
                if not content:
                    break
    
                # 将读取到的数据写入到新对象中
                new_obj.write(content)

    两种方式实现的功能一样。

    4、再来一个小练习

    需求:二进制文件读取(实现方式和上边一样)

    # 读取模式
    # t 读取文本文件(默认值)
    # b 读取二进制文件
    
    file_name = “hello.txt”
    
    with open(file_name , 'rb') as file_obj:
        # 读取文本文件时,size是以字符为单位的
        # 读取二进制文件时,size是以字节为单位
        # print(file_obj.read(100))
    
        # 将读取到的内容写出来
        # 定义一个新的文件
        new_name = 'aa.txt'
    
        with open(new_name , 'wb') as new_obj:
    
            # 定义每次读取的大小
            chunk = 1024 * 100
    
            while True :
                # 从已有的对象中读取数据
                content = file_obj.read(chunk)
    
                # 内容读取完毕,终止循环
                if not content :
                    break
    
                # 将读取到的数据写入到新对象中
                new_obj.write(content)

    注意:纯文本文件也可以使用二进制方法进行读取操作。

    到此,关于“怎么用python实现文件备份”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI