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

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)

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

  1. python 备份文件脚本

    使用python备份服务器的文件 #coding=utf- import os import os.path def copyFiles(sourceDir, targetDir): for file ...

  2. python简要

    python用冒号代替{}开启语句块 /usr/bin/python 加在脚本的头部, ./脚本 help("str") : 查看命令帮助 '''三引号可以打印换行字符串 prin ...

  3. python第四篇:linux命令行总结 + 自动备份Python程序

    由于最近需要学习Python爬虫相关的知识,所以就先从Python基础.Linux基础开始进行了学习,下面主要是总结了常见的Linux的命令行.最后为了巩固学到的东西,尝试写了个自动备份的Python ...

  4. Python 实例: 备份文件

    都说生命苦短,我用python, 所以这两天我也开始学python了. 昨天搞了下语法,今天搞出来个实例,备份文件.尽管编码相当烂,但是测试了一下,还真能用. 它读取一个任务文件, 根据指定的任务参数 ...

  5. 利用Python爆破数据库备份文件

    某次测试过程中,发现PHP备份功能代码如下: // 根据时间生成备份文件名 $file_name = 'D' . date('Ymd') . 'T' . date('His'); $sql_file_ ...

  6. python小程序:备份文件

    设计程序,有以下步骤: 需要备份的文件和目录由一个列表指定. 备份应该保存在主备份目录中. 文件备份成一个zip文件. zip存档的名称是当前的日期和时间. 解决方案: 版本一: #!/usr/bin ...

  7. 备份文件的python脚本(转)

    作用:将目录备份到其他路径.实际效果:假设给定目录"/media/data/programmer/project/python" ,备份路径"/home/diegoyun ...

  8. 配置百度云盘python客户端bypy上传备份文件

    要求:安装python2.7,安装git 1.git clone https://github.com/houtianze/bypy.git 2.cd bypy 3.sudo python setup ...

  9. python 项目实战之备份文件夹并且压缩文件夹及下面的文件

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/11/12 14:21 # @Author : zoulixiang # @S ...

随机推荐

  1. 记一次java电话面试

    答案补充中... 一.java基础 1.简述java的几种基本数据类型 JAVA的基本数据类型有:byte.char.boolean.short.int.long.float.double 2.什么是 ...

  2. 记一次gitlab-ce数据恢复过程

    使用的gitlab是用docker启动的,数据目录的owner/group信息被意外全部更改成了root:root导致服务不可用.最终通过复原文件所有者的方式恢复了服务. 步骤如下: 1. 打包备份g ...

  3. PyCharm激活(License server)

    打开激活窗口 选择 Activate new license with: License server (用license server 激活) 在 License sever address 处填入 ...

  4. goflyway简单使用

    前言 一个朋友最近新买的搬瓦工ip突然被强了,要等10周左右才能免费更换ip.而恰巧在网上看到了Goflyway 进阶教程:KCP 协议复活被墙IP 决定试一试.在vultr上临时搭建了测试环境,可能 ...

  5. maven项目自动创建src/main/resources等四个资源文件夹

    如何使maven项目自动创建这四个文件夹:src/main/resources.src/main/java.src/test/java.src/test/resources 网传甚广的在Config ...

  6. ActiveMQ(为什么要使用消息中间件,JMS传输模型)

    为什么要使用消息中间件:    同步请求:当客户端向服务器发送一条请求的时候,此时服务器由于网络,或者处理一些比较大的数据的时候,可能有延迟,客户端 会处于一直等待的状态.只有等待服务器返回处理结果, ...

  7. Python——PyQt GUI编程(python programming)

    import sys from math import * from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidg ...

  8. css中,在高度已知,写出三栏布局,其中左栏、右栏宽度各位300px,中间自适应

    解决方案主要有五种 首先写入全局样式 <style type="text/css"> html * { margin: ; padding: ; } .layout { ...

  9. 记一次深度系统安装至windows系统盘提示挂载为只读模式问题

    记一次深度系统安装至windows系统盘提示挂载为只读模式问题 来到新公司新电脑自己要安装deepin,安装的时候没考虑双系统直接装至默认win系统盘,导致deepin启动后提示如下: 提示多个挂载分 ...

  10. Python中随机森林的实现与解释

    使用像Scikit-Learn这样的库,现在很容易在Python中实现数百种机器学习算法.这很容易,我们通常不需要任何关于模型如何工作的潜在知识来使用它.虽然不需要了解所有细节,但了解机器学习模型是如 ...