您的位置:首页 > 编程语言 > Python开发

Python备份数据库并定期删除n天前的备份数据(本地)

2017-06-29 11:26 471 查看
Python备份数据库并定期删除n天前的备份数据(本地)

在Windows下进行数据本地备份:整个备份分为4部分,检查文件路径,备份,获取时间,定期删除。

调用库

import os
import time
import zipfile
import datetime
import configparser


1. 检查文件路径

source = [r'E:\database',r'E:\Atlassian\Application Data\Confluence']
# 源文件路径(r为转义字符,python中Windows的路径需要转义)
target_dir = r'E:\confluence'
# 备份文件路径

def check_path(self):
''' 检查源文件和备份路径 '''
if not os.path.exists(self.source):
print "the source %s is not exsits" % (self.source)
return False
if not os.path.isdir(self.target_dir):
os.makedirs(self.target_dir)
# 目标路径不存在时,创建目标路径
return True


2. 备份文件

文件备份的库可以使用zipfile也可以使用shutil,本文使用的是zipfile,将文件压缩成zip文件

def back_up():
today = time.strftime('%Y%m%d')
# 获取当前日期,调用time库
now = time.strftime('%H%M%S')
# 获取当前时间
target = target_dir + os.sep + today + '_' + now + '.zip'
# 备份文件名称
zip_command = zipfile.ZipFile(target, 'w')
'''
zf = zipfile.ZipFile(zipfilename, "w", zipfile.ZIP_STORED,allowZip64=True)
上面的函数有四个函数:
zip文件包含路径的名字,"w"/"r"表示写或者读,
zipfile.ZIP_STORED表示存储格式(还可以是zipfile.zlib.DEFLATED表示压缩格式),
allowZip64=True这个参数是在处理大文件时使用的,默认为False。
如果没有设置为True而处理大文件时会提示 zip file size require ZIP64 extensions.
'''
if check_path:
i = 0
while i < 2:
# 此处的循环是因为,源路径中有两个路径,两个路径均需要备份,因此使用循环,如果只有单一的路径,取消循环即可
for dirpath, dirnames, filenames in os.walk(source[i]):
for filename in filenames:
# 多级目录备份
path = os.path.join(dirpath, filename)
zip_command.write(path)
i += 1
zip_command.close()


源目录只有一个是的备份代码:

if check_path:
for dirpath, dirnames, filenames in os.walk(source[i]):
for filename in filenames:
path = os.path.join(dirpath, filename)
zip_command.write(path)
zip_command.close()


3.获取时间

def getdate(): # 获取n天前的日期
parser = configparser.ConfigParser()
parser.read(r"E:\test\days.conf")
# 配置文件路径
n = parser.getint('day', 'days')#读取配置文件内容
today = datetime.date.today()
duration = datetime.timedelta(n)
beforeday = today - duration
#获取n天前的日期
ctime = beforeday.strftime('%Y-%m-%d')
#装换已经获得日期的格式
return ctime


配置文件,其中存放了日期

# database source
[day]
days = 5


4.删除文件

def getfilectime():
time = getdate()
list = os.listdir(target_dir )
filelist = []
for i in range(0, len(list)):
# 遍历目标目录下的所有文件,并将其放入列表
path = os.path.join(target_dir , list[i])
if os.path.isfile(path):
filelist.append(list[i])
for i in range(0, len(filelist)):
path = os.path.join(target_dir, filelist[i])
if os.path.isdir(path):
continue
timestamp = os.path.getctime(path)
# 获取文件的创建日期
date = datetime.datetime.fromtimestamp(timestamp)
ctime = date.strftime('%Y-%m-%d')
# 转换时间格式
print list[i], ' 创建时间是: ', ctime
if ctime == time:
os.remove(path)
# 删除文件
print path
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐