python练习-文件复制综合练习

一、需求:

        编写一个程序实现:用户输入一个文件名,完成对该文件的备份功能 (备份文件名为xx[备份]后缀,例如:test[备份].txt。

二、分析:

1、file_name接收用户输入数据

2、判断file_name的格式是否正确,后缀是否符合要求

        (1)是否有.分隔符

        (2)是否超过两个以上的.

        (3)后缀是否符合要求,从后缀列表中查询

        (4)判断文件是否存在指定目录下面

3、文件复制操作

        (1)读取文件数据

         (2)拼接复制文件名称

         (3)创建复制文件并写入数据

三、代码实现:

1、定义初始变量和函数

import os.path
import sys


def sys_over(name):
    """
    :param name: 如果输入exit,结束程序
    """
    if name == 'exit':
        print('欢迎再次使用文件备份系统')
        sys.exit()


# 定义文件名称变量
file_name = ''
# 后缀列表
subfix_list = ['jpg', 'txt', 'mp4', 'avi']
# 如果文件夹路径不存在,则创建文件夹
filepath = 'folder'
if not os.path.isdir(filepath):
    # 创建文件夹
    os.mkdir(filepath)

2、判断文件命名是否符合要求

# 设置文件名称判断标志位,都满足则跳出循环
a, b, c, d = False, False, False, False
while True:
    if a and b and c and d:
        break
    file_name = input('请将文件放入folder文件夹,并输入文件名(含后缀):')
    sys_over(file_name)
    # 判断文件名称格式输入是否正确(缺少'.'则返回-1)
    if file_name.find('.') == -1:
        print('文件名格式错误,缺少.')
        continue
    else:
        a = True

    # 判断文件是否输入了两个'.',是则返回错误
    if len(file_name.split('.')) > 2:
        print('文件名格式错误,输入了两个及以上的.')
        continue
    else:
        b = True

    # 判断文件后缀输入是否正确,如果后缀不在后缀列表中需重新输入
    if file_name.split('.')[-1] not in subfix_list:
        print(f'文件后缀输入错误,不在后缀列表:{subfix_list}中')
        continue
    else:
        c = True

    # 判断文件名是否存在folder目录下
    if not os.path.exists(filepath+ '/' + file_name):
        print('输入的文件名不存在')
        continue
    else:
        d = True

3、文件复制操作

# 复制文件操作
with open(filepath+ '/' + file_name, mode='rb') as f:
    # 获取以.分割后的文件名称列表
    file_name_split = file_name.split('.')
    # print(file_name_split)
    # 拼接成新的文件名
    file_name_copy = file_name_split[0] + '[备份]' + '.' + file_name_split[-1]
    # 读取原始文件数据
    data = f.read()
    with open(filepath+ '/' + file_name_copy, mode='wb') as f_copy:
        f_copy.write(data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值