用python实现文件备份
作者:繁华似锦Fighting 发布时间:2022-04-19 06:28:19
标签: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)
注意:纯文本文件也可以使用二进制方法进行读取操作。
来源:https://www.cnblogs.com/liuyuelinfighting/p/15853186.html
0
投稿
猜你喜欢
- 1. 线性表简介线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列。线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一
- 1. 问题描述输入一个字符串然后对其进行逆序输出第一种方式:字符串切片第二种方式:使用循环转换然后逆序输出比如:输入字符串'hell
- A朋友:你直接问。B朋友:你女朋友睡了后,偷偷拿电脑查。C朋友:咱们不吊死在一棵树上,不对劲就早点脱身。D朋友:我觉得A的不行,直接问容易打
- 最近学习Python接口测试,对于接口测试完全小白。大概一周的学习成果进行总结。1.接口测试:目前涉及到的只是对简单单一的接口进行参数传递,
- 通常,当一个页面有太多信息要显示,而一页塞又不下所有信。为了请求速度、美观以及其他的各种理由,分页就会被我们请过来。让我们的用户可以选择是否
- 如何使用Pytorch实现two-head(多输出)模型1. two-head模型定义先放一张我要实现的模型结构图:如上图,就是一个two-
- 在Python中,语法错误可以被Python解释器发现,但逻辑上错误或变量使用错误却不容易发现,如果结果没有符合预期,则需要调试,一个很好的
- 使用Python IDLE时发现并没有清空当前窗口的快捷键,也没有像 clear 这样的命令,使用非常不便。新建一个 ClearWindow
- 一、前言对于一个桌面应用来说,有时候单独一个窗口用户使用起来会不太方便,比方说写日报或者查看文件等,若是在同一窗口内,我只能做一件事,不能边
- Python中的set集合一、集合是什么?集合是什么呢?相信读者朋友们哪怕是没有用过集合这个数据类型。也一定在数学课堂上听过集合这个名词。数
- Python的matplotlib包可以轻松的将数据可视化,博主最近遇到了一个问题,博主想同时在两个窗口展示两张图,但是代码运行结果总是显示
- 优化糟糕设计的表结果或者索引能很大程度改进mysql的性能。 如果需要高性能, 那么就需要根据不同的操作需求精心设计表结构和索引, 这当然需
- 继续我们的 Javascript 优化计划,上期已经做到怎么尽可能的缩小 Javascript 脚本的文件体积便于传输。不过这样做仅仅是不够
- python实现原图裁剪为固定尺寸小图的具体代码,供大家参考,具体内容如下讲解1、代码效果:实现原图裁剪为固定尺寸小图代码import nu
- 本文完全利用numpy实现一个简单的BP神经网络,由于是做regression而不是classification,因此在这里输出层选取的激励
- python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。d
- 数据库(database)MySQL 是最流行的开源数据库系统,可运行于几乎所有的操作系统平台。在《MySQL 安装》一文中详解介绍了安装步
- 目录1. 开发之前确定实体类型2. 请求接口时只需要定义自己需要用到的字段3. 使用枚举类型4. DOM元素的类型要正常给5.对象的类型要怎
- 我有两个继承一个基类的Django模型:- Request- Inquiry- Analysis请求有两个外键到内置用户模型。create_
- logging日志模块:是用来记录日志的模块,一般记录用户在软件中的操作使用方法:模板直接拿来用,手动修改# logging的配置信息(模板