用python實(shí)現(xiàn)文件備份
1、需求
用戶輸入當(dāng)前目錄下任意文件名,程序完成對該文件的備份功能。
備份文件名為xx[備份]后綴,例如:test[備份].txt。
2、步驟
接收用戶輸入的文件名。規(guī)劃備份文件名。備份文件寫入數(shù)據(jù)。
3、代碼實(shí)現(xiàn)
(1)接收用戶輸入目標(biāo)文件名
old_name = input('請輸入您要備份的文件名:')(2)規(guī)劃備份文件名
2.1 提取目標(biāo)文件后綴。
2.2 組織備份的文件名,xx[備份]后綴。
# 2.1 提取文件后綴點(diǎn)的下標(biāo)
index = old_name.rfind('.')
# 2.2 組織新文件名 舊文件名 + [備份] + 后綴
new_name = old_name[:index] + '[備份]' + old_name[index:]
(3)備份文件寫入數(shù)據(jù)
3.1 打開源文件 和 備份文件。
3.2 將源文件數(shù)據(jù)寫入備份文件。
3.3 關(guān)閉文件。
# 3.1 打開文件
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')
# 3.2 將源文件數(shù)據(jù)寫入備份文件
# 如果不確定目標(biāo)文件大小,循環(huán)讀取寫入,
# 當(dāng)讀取出來的數(shù)據(jù)沒有了終止循環(huán)
while True:
# 每次在原文件中讀取的內(nèi)容
con = old_f.read(1024)
# 表示讀取完成了
if len(con) == 0:
# 終止讀取
break
# 新文件寫入讀取的數(shù)據(jù)
new_f.write(con)
# 3.3 關(guān)閉文件
old_f.close()
new_f.close()(4)思考
如果用戶輸入.txt,這是一個無效文件,程序如何更改才能限制只有有效的文件名才能備份?
答:添加條件判斷即可。
# 有文件名,才能提取后綴
# 這里無法取得后綴,拼接的時候沒有后綴的變量
# 就會報(bào)錯
if index > 0:
postfix = old_name[index:]
(5)完整編碼
1)傳統(tǒng)實(shí)現(xiàn)
# 1. 用戶輸入目標(biāo)文件 如:sound.txt.mp3
old_name = input('請輸入您要備份的文件名:')
# 2. 規(guī)劃備份文件的名字
# 2.1 提取后綴 --
# 找到名字中的最右側(cè)的點(diǎn)才是后綴的點(diǎn)
# 在右側(cè)查找rfind()方法
# 獲取文件全名中后綴.的位置
index = old_name.rfind('.')
# 4. 思考:有效文件才備份 .txt
if index > 0:
# 提取后綴,這里提取不到,后面拼接新文件名字的時候就會報(bào)錯
postfix = old_name[index:]
# 2.2 組織新名字 = 原名字 + [備份] + 后綴
# 原名字就是字符串中的一部分子串 -- 切片[開始:結(jié)束:步長]
# new_name = old_name[:index] + '[備份]' + old_name[index:]
new_name = old_name[:index] + '[備份]' + postfix
# 3. 備份文件寫入數(shù)據(jù)(數(shù)據(jù)和原文件一樣)
# 3.1 打開 原文件 和 備份文件
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')
# 3.2 原文件讀取,備份文件寫入
# 如果不確定目標(biāo)文件大小,循環(huán)讀取寫入,當(dāng)讀取出來的數(shù)據(jù)沒有了終止循環(huán)
while True:
# 每次在原文件中讀取的內(nèi)容
con = old_f.read(1024)
# 表示讀取完成了
if len(con) == 0:
# 終止讀取
break
# 新文件寫入讀取的數(shù)據(jù)
new_f.write(con)
# 3.3 關(guān)閉文件
old_f.close()
new_f.close()2)實(shí)際工作實(shí)現(xiàn)
# 1. 用戶輸入目標(biāo)文件 如: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
# 創(chuàng)建并打開新文件
with open(new_name, 'wb') as new_obj:
# 定義每次讀取的大小
chunk = 1024 * 100
while True:
# 從已有的對象中讀取數(shù)據(jù)
content = file_obj.read(chunk)
# 內(nèi)容讀取完畢,終止循環(huán)
if not content:
break
# 將讀取到的數(shù)據(jù)寫入到新對象中
new_obj.write(content)
兩種方式實(shí)現(xiàn)的功能一樣。
4、再來一個小練習(xí)
需求:二進(jìn)制文件讀?。▽?shí)現(xiàn)方式和上邊一樣)
# 讀取模式
# t 讀取文本文件(默認(rèn)值)
# b 讀取二進(jìn)制文件
file_name = “hello.txt”
with open(file_name , 'rb') as file_obj:
# 讀取文本文件時,size是以字符為單位的
# 讀取二進(jìn)制文件時,size是以字節(jié)為單位
# print(file_obj.read(100))
# 將讀取到的內(nèi)容寫出來
# 定義一個新的文件
new_name = 'aa.txt'
with open(new_name , 'wb') as new_obj:
# 定義每次讀取的大小
chunk = 1024 * 100
while True :
# 從已有的對象中讀取數(shù)據(jù)
content = file_obj.read(chunk)
# 內(nèi)容讀取完畢,終止循環(huán)
if not content :
break
# 將讀取到的數(shù)據(jù)寫入到新對象中
new_obj.write(content)注意:純文本文件也可以使用二進(jìn)制方法進(jìn)行讀取操作。
總結(jié)
到此這篇關(guān)于用python實(shí)現(xiàn)文件備份的文章就介紹到這了,更多相關(guān)python文件備份內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決CentOS下ImportError: No module named &a
這篇文章主要介紹了解決CentOS下ImportError: No module named '_sqlite3'的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
pandas?dataframe?drop函數(shù)介紹
這篇文章主要介紹了pandas?dataframe?drop函數(shù)介紹,文章通圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
Python根據(jù)字典值對字典進(jìn)行排序的三種方法實(shí)例
Python中的字典是無序類型,沒有自己的排序方法,下面這篇文章主要給大家介紹了關(guān)于Python根據(jù)字典值對字典進(jìn)行排序的三種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
pandas將DataFrame的幾列數(shù)據(jù)合并成為一列
本文主要介紹了pandas將DataFrame的幾列數(shù)據(jù)合并成為一列,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02
Python基于LightGBM進(jìn)行時間序列預(yù)測
LightGBM是擴(kuò)展機(jī)器學(xué)習(xí)系統(tǒng)。是一款基于GBDT(梯度提升決策樹)算法的分布梯度提升框架。其設(shè)計(jì)思路主要集中在減少數(shù)據(jù)對內(nèi)存與計(jì)算性能的使用上,以及減少多機(jī)器并行計(jì)算時的通訊代價。本文將通過LightGBM進(jìn)行時間序列預(yù)測,感興趣的可以了解一下2022-03-03
pytorch 優(yōu)化器(optim)不同參數(shù)組,不同學(xué)習(xí)率設(shè)置的操作
這篇文章主要介紹了pytorch 優(yōu)化器(optim)不同參數(shù)組,不同學(xué)習(xí)率設(shè)置的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05
Django錯誤:TypeError at / ''bool'' object is not callable解決
這篇文章主要介紹了Django 錯誤:TypeError at / 'bool' object is not callable解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08
python+pytest接口自動化之日志管理模塊loguru簡介
python中有一個用起來非常簡便的第三方日志管理模塊--loguru,不僅可以避免logging的繁瑣配置,而且可以很簡單地避免在logging中多進(jìn)程多線程記錄日志時出現(xiàn)的問題,甚至還可以自定義控制臺輸出的日志顏色,接下來我們來學(xué)習(xí)怎么使用loguru模塊進(jìn)行日志管理2022-05-05

