使用python备份文件

想写个定时备份文件的功能,这个功能需要实现:
1.搜索指定的目录里是否存在当天的文件
2.如果存在压缩并加密文件
3.通过ftp上传到备份服务器
4.在备份服务器上定时将文件拷贝到移动硬盘并定时清理文件

本来想通过BAT文件批处理做,无奈水平有限,这BAT的语法实在玩不来。。。正好前几天图书打折囤了几本python的书,就想用Python试试看,折腾两三个小时,总算搞定了,在这里备份一下。
Python的语法有些怪异的,类的实例方法第一个入参要写self,应该类似于C#,Java里的this,问题是其他语言都是编译器给默认加一个this,它这个要码农自己码上一个self。
C#,Java用分号表示语句的结束,Python省事了 不用分号了,这个倒是像VB.
更诡异的是 语句块,C#和Java用{}包括,VB的if至少有个endif表示结束,python比较神奇,直接用代码的缩进表示,这下好了,代码的缩进不止是代码美观的问题了,还有语法含义,这样写出来的代码应该看上去至少是整齐划一的,不整齐语义都不对了。。。
当然了 这些只是语言风格的问题,没什么好与坏,习惯了就好了。
单纯从这个脚本小功能来说,Python用起来还是蛮顺手的,Pycharm这个IDE也是蛮好用的,当然了,这个只是这个微不足道的小功能来说,大型的功能开发就不知道了。

1.搜索指定目录

import glob
import os
import shutil

class FileHelper:
    def __init__(self, searchdir, searchstr):
        self.dir = searchdir
        self.searchstr = searchstr

    def get_sourcefile(self):
        sourcepath = ("{searchdir}\*{searchstr}*".format(searchdir=self.dir, searchstr=self.searchstr))
        return glob.glob(sourcepath)

    @staticmethod
    def get_destfile(sourcefile, destdir):
        tail = os.path.split(sourcefile)[1]
        return os.path.join(destdir, tail[:tail.rfind(‘.‘)] + ‘.zip‘)

    @staticmethod
    def get_shortfilename(sourcefile, destdir):
        tail = os.path.split(sourcefile)[1]
        return os.path.join(destdir, tail)

    @staticmethod
    def copyfile(sourcefilename, destfilename):
        shutil.copyfile(sourcefilename, destfilename)

    @staticmethod
    def deletefile(filename):
        os.remove(filename)

2.压缩文件
本来想通过Python自带的zipfile类来实现的,如下代码所示。

import zipfile

class Zip(object):

    def __init__(self, sourcefilename, destfilename, password):
        self.sourcefilename = sourcefilename
        self.destfilename = destfilename
        self.password = password

    def zip(self):
        azip = zipfile.ZipFile(self.destfilename, ‘w‘)
        azip.setpassword(self.password.encode(‘utf-8‘))
        azip.write(self.sourcefilename)

结果生成的压缩文件,不用密码都可以打开,查了Python的文档才知道
zipFile.setpassword(pwd)

Set pwd as default password to extract encrypted files.
这个密码是用来解压文件时候用的,至于压缩文件的时候怎么设置密码,就不知道了。。。
所以退而求其次,用7zip的命令行方式了

import os

class Zip(object):

    def __init__(self, sourcepath, destpath, password):
        self.sourcepath = sourcepath
        self.destpath = destpath
        self.password = password

    def zipfile(self):
        pipe = os.popen("7z a -tzip {destpath} -p{password} {sourcepath}".format(destpath=self.destpath,
                                                                                 password=self.password,
                                                                                 sourcepath=self.sourcepath))
        pipe.read()
        pipe.close()

3.上传FTP

import ftplib

class FileUpaloder:

    def __init__(self, host, username, password, localfile, remotefile):
        self.host = host
        self.username = username
        self.password = password
        self.localfile = localfile
        self.remotefile = remotefile

    def upload(self):
        f = ftplib.FTP(self.host)
        f.login(self.username, self.password)
        bufsize = 1024
        fp = open(self.localfile, ‘rb‘)
        f.storbinary(‘STOR ‘ + self.remotefile, fp, bufsize)
        fp.close()
        f.quit()

4.备份并定时清理文件

from filehelper import *
import datetime

sourcepath = "C:\\source"
destpath = "C:\\source\\backup"
searchstr = "aa"

FileHelper = FileHelper(sourcepath, searchstr)
sourcefilelist = FileHelper.get_sourcefile()

# 备份文件
for filename in sourcefilelist:
    destfilename = FileHelper.get_destfile(filename, destpath)
    datestr = datetime.date.today().strftime("%Y_%m_%d")
    if filename in datestr:
        FileHelper.copyfile(filename, destfilename)

# 删除文件
for filename in sourcefilelist:
    datestr = filename[13:23]
    filedate = datetime.datetime.strptime(datestr, "%Y_%m_%d")
    checkDate = datetime.date.today() - datetime.timedelta(days=10)
    if filedate <= checkDate:
        FileHelper.deletefile(filename)

原文地址:https://www.cnblogs.com/Farseer1215/p/9579655.html

时间: 2024-07-29 23:31:59

使用python备份文件的相关文章

Python 备份文件 windows

学习Python时遇到一个备份的问题, 下面记录下. 使用Python 在windows 下备份文件. 有几个需要注意的地方: 1.  需下载 7 zip 下载地址 :   http://www.7-zip.org/download.html  根据自己的系统下载对应的版本 2.  7 zip 安装路径中的文件夹名不能出现空格, 以我的为例默认是安装在 C:\Program Files 下. Program Files 文件夹中有空格会导致导入失败,安装的时候自己按需要替换下. (我的安装路径

用python备份文件

光说不练假把式,用小脚本学习Python. 一个简单的备份脚本. #!/usr/bin/env python3 #-*- coding:utf-8 -*- #for backup import os import time #需要备份的目录 source = ['/var/log/history/','/var/log/httpd/'] #保存备份的目录 target_dir = '/tmp/' today_dir = target_dir + time.strftime('%Y%m%d') t

使用Python从rds上下载mysql备份文件

使用Python脚本从rds上下载mysql的备份,该脚本可以下载全备份,日志备份. 主要用到以下几个模板. from aliyunsdkcore import client from aliyunsdkrds.request.v20140815 import DescribeBackupsRequest from aliyunsdkrds.request.v20140815 import DescribeBinlogFilesRequest 这几个模板是阿里云提供的模板,用户操作mysql的,

Python 实例: 备份文件

都说生命苦短,我用python, 所以这两天我也开始学python了. 昨天搞了下语法,今天搞出来个实例,备份文件.尽管编码相当烂,但是测试了一下,还真能用. 它读取一个任务文件, 根据指定的任务参数自动备份. 任务文件的格式: (注意,分号后面注释是不支持的) [vb] view plaincopy [task]  ; 一项任务开始 dir=h:/Project  ; 指定备份的目录 recusive=1      ; 是否递归子目录 suffix=h|cpp|hpp|c|user|filte

python 使用tar备份文件,目录,排除文件

#!/usr/bin/python # -*- coding: utf-8 -*- import time,os,sys #获取输出需要备份的文件或者目录 source_file = sys.argv[1] #通过os.path.isfile(source_file)函数来判断需要备份的是文件或目录 state=os.path.isfile(source_file) print state #如果是文件则执行以下代码 if state == True: #获取备份文件 back_file = s

通过python获取苹果手机备份文件中的照片,视频等信息采集

前言:苹果手机用户通常会将手机备份到电脑上,而备份文件通常不会自动删除.在我们电脑取证,或者***到一台电脑后可以通过python脚本获取到备份文件中的一些隐私信息,比如照片.视频.相关软件中的一些账号,联系信息等等.但是我们进入到备份文件目录,会发现文件都没有后缀名,而且很乱.似乎没有什么用.我们看到的如下:备份目录(win7):C:\Users\你的用户名\AppData\Roaming\Apple Computer\MobileSync\Backup\ 在备份文件的根目录下有个Manife

python模块-通过os备份文件

#!/usr/bin/env python # -*- coding:utf-8 -*- # author:Administrator # make_time:2018/6/17 import sys import os import time # 待备份文件目录 source = ["D:\\friend", "D:\\照片"] # 存储备份目录 backup_dir = "D:\\backup picture" # 备份文件打包成7z文件,7

python按日期分类备份文件夹

[[email protected] tmp]# cat backup.py #!/usr/bin/env python import os import time import sys def create_backup_dir(target_dir):     today_dir = target_dir + time.strftime('%Y-%m-%d')     if not os.path.exists(today_dir):             os.mkdir(today_d

写一个备份文件的python脚本

#!/usr/bin/env python #-*- coding:utf-8 -*- import os import zipfile import time start_Dir = '/home/dragon/python/'   #需要压缩的文件或目录路径 List_1 = ['.git',  '.svn','temp']   #不需要备份的目录 target_zip = '/home/dragon/'   #压缩文件存放位置 Times = time.strftime('%Y%m%d%H