如何使用Python腳本實(shí)現(xiàn)文件拷貝
這篇文章主要介紹了如何使用Python腳本實(shí)現(xiàn)文件拷貝,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
1.實(shí)現(xiàn)目的
統(tǒng)一時(shí)間對(duì)服務(wù)器某文件夾內(nèi)文件進(jìn)行備份保存,如若備份成功則不提示任何錯(cuò)誤,否則將以郵件的形式告知管理員,備份出錯(cuò)。
2.程序流程圖
主要流程圖

拷貝流程圖

3.代碼編寫
1.MyMain函數(shù)
[root@Python CheckCopyFiles]# cat MyMain.py
#!/usr/bin/env python
import os
import sys
import MyFileZip
def main() :
dir1 = "/root/dir1"
dir2 = "/root/dir2"
if os.path.isdir(dir2) == False :
os.mkdir(dir2)
if os.path.isdir(dir1) :
MyFileZip.FileCopy(dir1,dir2)
else :
sys.exit(-1)
if __name__ == "__main__" :
main()
[root@Python CheckCopyFiles]#
2.MyFile函數(shù)
[root@Python CheckCopyFiles]# cat MyFileZip.py
#!/usr/bin/env python
import zipfile
import time
import os
import MySendMail
def FileCopy(dir1,dir2) :
try:
NowDate = time.strftime("%Y-%m-%d")
Zfile = dir2+ '/'+'logfile_'+NowDate+'.zip'
zf = zipfile.ZipFile(Zfile,'w')
for filename in os.listdir(dir1) :
if os.path.isfile(dir1 + '/' + filename) :
zf.write(dir1 + '/' + filename)
os.remove(dir1 + '/' + filename)
zf.close()
except:
MySendMail.SamMail(NowDate,dir1,dir2)
[root@Python CheckCopyFiles]#
3.SendMail函數(shù)
[root@Python CheckCopyFiles]# cat MySendMail.py
#!/usr/bin/env python
import smtplib
import email.mime.text
def SamMail(NowDate,dir1,dir2) :
HOST = "smtp.163.com"
SUBJECT = "Copy File Warning"
TO = "發(fā)送的帳號(hào)"
FROM = "來自于賬戶"
Remask = "Copy dirctory warning"
msg = email.mime.text.MIMEText("""
<html>
<body>
<h1>Warning</h1>
<h2>Time:%s</h2>
<h2>Dirctory:%s</h2>
<h2>Remask:%s</h2>
</body>
</html>
""" % (NowDate,dir1,"Copy File Error"),"html","utf-8")
msg['Subject'] = SUBJECT
msg['From'] = FROM
msg['TO'] = TO
try:
server = smtplib.SMTP()
server.connect(HOST,'25')
server.starttls()
server.login("帳號(hào)","密碼")
server.sendmail(FROM,TO,msg.as_string())
server.quit()
except:
print ("Send mail Error")
[root@Python CheckCopyFiles]#
4.實(shí)現(xiàn)效果
4.1 建立新的文件
[root@Python ~]# touch /root/dir1/7 /root/dir1/8 [root@Python ~]#
4.2 執(zhí)行代碼
[root@Python ~]# python /root/python/CheckCopyFiles/MyMain.py [root@Python ~]#
4.3 查看文件
[root@Python ~]# ls -l /root/dir1 -a total 0 drwxrwxrwx. 2 root root 6 Aug 27 09:26 . dr-xr-x---. 6 root root 201 Aug 27 09:26 .. [root@Python ~]#
[root@Python ~]# ls -l /root/dir2/
total 4
-rw-r--r--. 1 root root 218 Aug 27 09:28 logfile_2017-08-27.zip
[root@Python ~]# unzip -v /root/dir2/logfile_2017-08-27.zip
Archive: /root/dir2/logfile_2017-08-27.zip
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
0 Stored 0 0% 08-27-2017 09:27 00000000 root/dir1/7
0 Stored 0 0% 08-27-2017 09:27 00000000 root/dir1/8
-------- ------- --- -------
0 0 0% 2 files
[root@Python ~]#
由此可見,dir1中的文件已經(jīng)備份至/root/dir2/logfile_2017-08-27.zip中,且已經(jīng)刪除了原文件
4.3 查看發(fā)送郵件效果
修改一下源碼:
[root@Python CheckCopyFiles]# cat MyFileZip.py
#!/usr/bin/env python
import zipfile
import time
import os
import MySendMail
def FileCopy(dir1,dir2) :
try:
NowDate = time.strftime("%Y-%m-%d")
Zfile = dir2+ '/'+'logfile_'+NowDate+'.zip'
zf = zipfile.ZipFile(Zfile,'w')
for filename in os.listdir(dir1) :
if os.path.isfile(dir1 + '/' + filename) :
zf.write(dir1 + '/' + filename)
os.remove(dir1 + '/' + filename)
zf.close()
sys.exit()
except:
MySendMail.SamMail(NowDate,dir1,dir2)
[root@Python CheckCopyFiles]#
22行 sys 模塊并未導(dǎo)入,故一定會(huì)出錯(cuò)
執(zhí)行效果如下:
[root@Python ~]# python /root/python/CheckCopyFiles/MyMain.py [root@Python ~]#
收到郵件的效果如下:

只要把腳本寫入crontab,那樣就可以按時(shí)執(zhí)行了,例如:
[root@Python CheckCopyFiles]# crontab -l 00 14 * * 0 /usr/bin/python /root/python/CheckCopyFiles/MyMain.py [root@Python CheckCopyFiles]#
意思是每周日14點(diǎn)調(diào)用/usr/bin/python 去執(zhí)行/root/python/CheckCopyFiles/MyMain.py文件
至此,由python寫的備份腳本已經(jīng)全部完成
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在python中創(chuàng)建表格的兩種方法實(shí)例
Python 是一種解釋型、面向?qū)ο?、?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語言,下面這篇文章主要給大家介紹了關(guān)于如何在python中創(chuàng)建表格的兩種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01
Python實(shí)現(xiàn)前端樣式尺寸單位轉(zhuǎn)換
在?Web?前端項(xiàng)目開發(fā)時(shí),樣式尺寸都是以?rpx?為單位,可是?UI?設(shè)計(jì)師在看完開發(fā)后的?UI?,卻要求都以?px?為單位,所以本文就和大家分享一個(gè)利用Python就能實(shí)現(xiàn)尺寸單位轉(zhuǎn)換的方法吧2023-06-06
python神經(jīng)網(wǎng)絡(luò)使用tensorflow實(shí)現(xiàn)自編碼Autoencoder
這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)使用tensorflow實(shí)現(xiàn)自編碼Autoencoder,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
教你如何使用Python實(shí)現(xiàn)二叉樹結(jié)構(gòu)及三種遍歷
什么是二叉樹:每個(gè)節(jié)點(diǎn)最多有兩個(gè)子樹的樹結(jié)構(gòu),通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree) 二叉樹由兩個(gè)對(duì)象組成,一個(gè)是節(jié)點(diǎn)對(duì)象,一個(gè)是樹對(duì)象,需要的朋友可以參考下2021-06-06
python3利用pathlib替代os.path的方法實(shí)例
os.path 模塊始終是適合Python運(yùn)行的操作系統(tǒng)的路徑模塊,因此可用于本地路徑,下面這篇文章主要給大家介紹了關(guān)于python3利用pathlib替代os.path的相關(guān)資料,需要的朋友可以參考下2022-04-04
如何用Pytorch搭建一個(gè)房?jī)r(jià)預(yù)測(cè)模型
這篇文章主要介紹了用Pytorch搭建一個(gè)房?jī)r(jià)預(yù)測(cè)模型,在這里我將主要討論P(yáng)yTorch建模的相關(guān)方面,作為一點(diǎn)額外的內(nèi)容,我還將演示PyTorch中開發(fā)的模型的神經(jīng)元重要性,需要的朋友可以參考下2023-03-03
基于Python模擬瀏覽器發(fā)送http請(qǐng)求
這篇文章主要介紹了基于Python模擬瀏覽器發(fā)送http請(qǐng)求,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11

