当下是信息时代,信息在当今社会占据的地位不言而喻,信息安全更是当前人类重视的问题之一。人类考虑从传输和存储两方面保障信息的安全,备份是在存储工作中保障信息安全的有效方式。本案例要求编写程序,实现一个具有备份文件与文件夹功能的备份工具。
实例分析
文件备份工具的操作流程如下:
(1)用户输入备份的目录;
(2)用户输入备份的文件;
(3)备份文件,提示“备份成功”。
在备份文件或目录时,需要判断待备份的文件或目录是否已经存在:若指定备份的目录不存在,则新建一个指定的目录,否则直接在指定的目录下备份文件;若指定的文件不存在,则提示“备份的文件不存在!”,否则直接备份文件。
import os
# 选择备份的对象(目录或者文件)
def gnxz():
print('============== 请选择备份的对象 ================')
print('1.备份目录')
print('2.备份文件')
# 处理备份
def backup_file(src, dist, file_name):
# 判断dist目录是否存在,如果不存在,创建目录
if not os.path.exists(dist):
os.makedirs(dist)
print("指定的目录不存在,创建完成")
# 判断文件是否为我们要备份
# 得到的是文件名 拼接文件的完整路径
full_src_path = os.path.join(src, file_name)
full_dist_path = os.path.join(dist, file_name)
# 首先判断是否为文件夹,然后借助文件后缀名判断
if os.path.isfile(full_src_path) and os.path.splitext(full_src_path)[-1].lower() == '.py':
# print(full_src_path) # 打印看一下要备份的文件完整目录
with open(full_dist_path, 'w', encoding='utf-8') as f_dist, \
open(full_src_path, 'r', encoding='utf-8') as f_src:
print("开始备份【{0}】".format(file_name))
# 读取文件内容
while True:
rest = f_src.read(100)
if not rest:
break
# 把读取到的内容写入新的文件中
f_dist.write(rest)
f_dist.flush() # 把剩余没写进去的全部写出去
print("【{0}】备份完成".format(file_name))
else:
print("文件类型不符合要求,跳过..")
# 备份目录
def bf_mulu():
# src = 'D:\JetBrains\PycharmProjects\实验报告项目十二'
src = input('请输入您要备份的目录路径:')
# dist = 'D:\JetBrains\PycharmProjects\实验报告项目十二\备份'
dist = input('请输入您要将备份放入的目录路径:')
list1 = os.listdir(src)
print(f'该目录存在的所有文件:{list1}')
for i in list1:
backup_file(src, dist, i)
# 备份文件
def bf_wenjian():
old_name = input('请输入您要备份的文件:')
pd = os.path.exists(old_name) # 判断文件是否存在
if pd:
index = old_name.rfind('.') # . 的下标
postfix = '' # 创建字符串储存 包括.的后缀名
if index > 0: # 确保其是有效文件
postfix = old_name[index:]
# 新文件名: 旧文件名+[备份]+后缀
new_name = old_name[:index] + '[备份]' + postfix
print('新文件名:', new_name)
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')
# 将数据写入备份文件
while True:
con = old_f.read(1024)
if len(con) == 0:
print('备份成功!')
break
new_f.write(con)
old_f.close()
new_f.close()
else:
print('备份的文件不存在!')
# 测试
if __name__ == '__main__':
gnxz()
a = int(input('请选择备份的对象的序号:'))
while True:
if a == 1:
bf_mulu()
b = input('是否继续(y/n):')
if b in 'Y是yes':
a = int(input('请选择备份的对象的序号:'))
elif b in 'N否no':
print('成功退出')
break
elif a == 2:
bf_wenjian()
b = input('是否继续(y/n):')
if b in 'Y是yes':
a = int(input('请选择备份的对象的序号:'))
elif b in 'N否no':
print('成功退出')
break
else:
print('对不起,序号错误。请重新输入!')
a = int(input('请选择备份的对象的序号:'))