• 技术文章 >后端开发 >Python教程

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

    2016-06-16 08:47:55原创467
    本来是想写一个东西可以直接调用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 + '//m.sbmmt.com/m/' + prj_folder + '//m.sbmmt.com/m/').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备份目录及目录下的全部内容的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:python 目录
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• 实例详解Python面向对象的四大特征• Python数据分析之concat与merge函数(实例详解)• 一起聊聊Python的编码样式• 介绍六个超好用的Python内置函数• 图文详解怎么用Python绘制动态可视化图表
    1/1

    PHP中文网