Python实现备份文件实例
admin
2023-07-31 02:13:03
0

本文实例讲述了Python实现备份文件的方法,是一个非常实用的技巧。分享给大家供大家参考。具体方法如下:

该实例主要实现读取一个任务文件, 根据指定的任务参数自动备份.

任务文件的格式: (注意,分号后面注释是不支持的)

[task] ; 一项任务开始
dir=h:/Project ; 指定备份的目录
recusive=1 ; 是否递归子目录
suffix=h|cpp|hpp|c|user|filters|vcxproj|sln|css|gif|html|bmp|png|lib|dsw|dsp|htm|html|ico|ini|jpg|rc|vssscc ; 指定备份的扩展名
exclude=0 ; 指定是备份上面的参数指定的扩展名还是排除指定的扩展名
zip=Project.zip ; 备份后的文件路径名

python代码如下:

# -*- coding: utf-8 -*- 
import sys
import os
import zipfile
class Task:
 #dir str directory
 #bsub BOOL include subdirectory
 #sfx str postsuffix ,sepeated by \'|\'
 #ecld BOOL include or execlude the postsuffix sfx
 def __init__(self,dir,bsub,sfx,ecld,zip):
 self.dir = dir
 self.bsub = bsub
 self.suffix = sfx.split(\"|\")
 self.exclude = ecld
 self.zip = zip
 
 @staticmethod
 def isfilter(sfx,sfxs,bexcld):
 bFound = False
 for e in sfxs:
  if e == sfx:
  bFound = True
  break 
 if bexcld:
  return not bFound;
 else:
  return bFound;
 
class QBackup:
 \'\'\'备份指定目录下具备指定扩展名的文件\'\'\'
 def __init__(self):
 self._list = []
 
 def __del__(self):
 pass
 
 #tfile 任务文件
 def ReadTask(self,tfile):
 dir = \"\"
 bsub = False
 sfx = \"\"
 becld = False
 zip = \"\"
 try:
  f = open(tfile,\'r\')
  while True:
  line = f.readline()
  if len(line) == 0:
   break;
  line = line.strip(\" \")
  if \"[Task]/n\".lower() == line.lower():
   # 读取接下来的4行
   iline = 1
   while iline <= 5:
   line = f.readline()
   line = line.strip(\" /t/n\") # 去除前后的空白符 
   idx = line.find(\"=\")
   if -1 == idx:
    break;
   atti = line[0:idx]
   value = line[idx+1:]
   print(value)
   if \"dir\" == atti:
    dir = value
   elif \"recusive\" == atti:
    bsub = bool(int(value))
   elif \"suffix\" == atti:
    sufix = value
   elif \"exclude\" == atti:
    becld = bool(int(value))
   elif \"zip\" == atti:
    zip = value
   else:
    break
   iline += 1
   else:
   t = Task(dir,bsub,sufix,becld,zip)
   self._list.append(t)
 except:
  return False
 return True
 
 def DoBackup(self):
 for e in self._list:
  try:
  zip = zipfile.ZipFile(e.zip,\'w\',zipfile.ZIP_DEFLATED)
  self.ZipDir(zip,e.dir,e.bsub,e.suffix,e.exclude)
  zip.close()
  except:
  print(\"exception raised!\")
  return False
 return True 
 def ZipDir(self,zip,dir,bsub,sfxs,ecld):
 subdir = \"\"
 path = \"\"
 if os.path.isdir(dir):
  paths = os.listdir(dir)
  #备份本目录
  print(\"ZipDir: \",dir)
  for e in paths:
  path = dir + \"/\" + e
  ext = os.path.splitext(e)[1][1:]
  if os.path.isfile(path) and Task.isfilter(ext,sfxs,ecld):
   print (\"ZipFile: \",path)
   zip.write(path)
  #清理子目录
  if bsub: 
  for e in paths:
   subdir = dir + \"/\" + e
   self.ZipDir(zip,subdir,bsub,sfxs,ecld)
 
 def PrintTask(self):
 for e in self._list:
  print (e.dir,e.bsub,e.suffix,e.exclude,e.zip)
 
if \'__main__\' == __name__:
 c = QBackup()
 c.ReadTask(\"bkup.txt\")
 c.DoBackup()
 

希望本文所述对大家Python程序设计的学习有所帮助。

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...