Python备份目录及目录下的全部内容的实现方法


Posted in Python onJune 12, 2016

本来是想写一个东西可以直接调用TortoiseSVN保存当前代码到一个分枝下的。

可惜调用SVN的部分还在研究。就先写了目录拷贝的部分。

如果有喜欢研究Python的童鞋愿意提供想法或者建议的话,

这里先谢谢了。 :)

就目录拷贝的部分,思想很简单。读配置文件中的配置信息。

生成一个项目名称加日期时间组成的文件夹名为分枝名称。把当前项目下的全部内容

拷贝到这个目录下。

然后要做的研究就是调用TortoiseSVN命令嵌入这部分代码。

现在看代码:

1. 读取配置文件

配置文件很简单。用的就是txt文件。 格式类似于:

# root:/Users/lichallenger/test_src/
# project:test
# destination:/Users/lichallenger/test_dst/

BTW: 我用的是Mac所以目录格式是这样的。如果你用的是Windows的话请适

当修改配置文件。

读文件就是最简单的了。直接用标准库的文件操作模块打开文件,读出全部的配置。一共就三行,所以

也不用考虑效率什么的了。

# open config file and read config information
# author: bruce li

class ConfigHandler(object):
  #
  def __init__(self,config_path):
    '''initializer'''
    self.config_path = config_path
  
  #read config infor
  def read_config(self):
    f = open(self.config_path)

    try:
      self.all_lines = f.readlines()
    except:
      raise  
    else: 

 f.close()

2. 拷贝目录和目录内容

拷贝目录用了shutil模块。里面有个方法可以直接把目录和目录下的全部内容拷贝到制定的其他目录。

这样就省得搞目录遍历之类的代码了。 

# copy dir(s) & file(s) to configured path
# author: bruce li

import shutil

class CopyHandler(object):
  #
  def __init__(self,src_path,dest_path):
    self.src_path = src_path
    self.dest_path = dest_path

  def move_content(self):
    try:
      shutil.copytree(self.src_path,self.dest_path)
    except:
      raise  

  @staticmethod
  def  move_src_content(src, dest):
    try:
      shutil.copytree(src_path,dest_path)
    except:
      raise

3. 综合调用

这里用了time模块获取当前时间,然后生成目标文件夹名称的一部分。 

外界给python传的系统参数的第一个是文件名。这个文件就相当于C#项目里的Program文件一样,

里面会包含一个main函数。虽然这个函数不一定要命名为main。 

还有注意下,Python代码的换行符为\。 

 # main of dir copy function

import sys
import time
from code_bk_cpy import *
from code_bk_config import *

#print __name__

def main():
  config_path = sys.argv[1]
  
  # check if path of configuration path is empty
  if (not config_path):
    print 'configuration information is needed'
    return -1   

  config_handler = ConfigHandler(config_path)
  config_handler.read_config()
  config_list = config_handler.all_lines

  if len(config_list) != 3:
    print 'configuration information is not correct'
    return -1
  
  # set source
  sep = ':'
  current_datetime = time.localtime(time.time())
  root_path = config_list[0].split(sep)[1]
  prj_name = config_list[1].split(sep)[1]
  dst_path = config_list[2].split(sep)[1]

  root_path = (root_path + prj_name).replace('\n','')
  prj_folder = prj_name + str(current_datetime.tm_year) + str(current_datetime.tm_mon) + \
str(current_datetime.tm_mday) + str(current_datetime.tm_hour) + \
str(current_datetime.tm_min) + str(current_datetime.tm_sec)

  dst_path = (dst_path + '/' + prj_folder + '/').replace('\n','')

  copy_handler = CopyHandler(root_path,dst_path)
  copy_handler.move_content()

  print 'content moved'


  

# start main function
print __name__
if __name__ == "__main__":
  main()

有时间我会研究下TortoiseSVN调用那块的东西。估计不会难,就是调用exe传参的问题。

本人初学Python,如有问题敬请指正!谢谢。

以上这篇Python备份目录及目录下的全部内容的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
pyenv命令管理多个Python版本
Mar 26 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
pandas进行数据的交集与并集方式的数据合并方法
Jun 27 Python
python 2.7.13 安装配置方法图文教程
Sep 18 Python
Python read函数按字节(字符)读取文件的实现
Jul 03 Python
Python 多个图同时在不同窗口显示的实现方法
Jul 07 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
python munch库的使用解析
May 25 Python
OpenCV图像变换之傅里叶变换的一些应用
Jul 26 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
Jun 25 Python
深入理解python中的闭包和装饰器
Jun 12 #Python
Python编码爬坑指南(必看)
Jun 10 #Python
浅析Python中的for 循环
Jun 09 #Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 #Python
Python-嵌套列表list的全面解析
Jun 08 #Python
PYTHON压平嵌套列表的简单实现
Jun 08 #Python
Python用Bottle轻量级框架进行Web开发
Jun 08 #Python
You might like
基于Zend的Captcha机制的应用
2013/05/02 PHP
探讨PHP调用时间格式的参数详解
2013/06/06 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
addEventListener()第三个参数useCapture (Boolean)详细解析
2013/11/07 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
jquery mobile开发常见问题分析
2016/01/21 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
JavaScript深拷贝和浅拷贝概念与用法实例分析
2018/06/07 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
Python反射用法实例简析
2017/12/22 Python
python实现单向链表详解
2018/02/08 Python
python装饰器深入学习
2018/04/06 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
python3实现网络爬虫之BeautifulSoup使用详解
2018/12/19 Python
python中的&&及||的实现示例
2019/08/07 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
Pytoch之torchvision.transforms图像变换实例
2019/12/30 Python
css sprite简单实例
2016/05/23 HTML / CSS
html5画布旋转效果示例
2014/01/27 HTML / CSS
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
业务总经理岗位职责
2014/02/03 职场文书
教你怎么用python selenium实现自动化测试
2021/05/27 Python
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang