Python如何备份目录及目录下的全部内容

开发 后端 前端
本来是想写一个东西可以直接调用TortoiseSVN保存当前代码到一个分枝下的。可惜调用SVN的部分还在研究。就先写了目录拷贝的部分。

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

生成一个项目名称加日期时间组成的文件夹名为分枝名称。把当前项目下的全部内容拷贝到这个目录下。然后要做的研究就是调用TortoiseSVN命令嵌入这部分代码。

现在看代码:

1. 读取配置文件

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

# root:/Users/lichallenger/test_src/  
# project:test  
# destination:/Users/lichallenger/test_dst/ 
  • 1.
  • 2.
  • 3.

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()  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

3. 综合调用

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

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

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

 # 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() 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.

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

原文链接:http://www.cnblogs.com/sunshine-anycall/archive/2011/04/05/2005971.html

【编辑推荐】

  1. Python编辑利器:PyCharm初探
  2. 你不知道的 Python装饰器的一个妙用
  3. 浅析Python中的列表解析和生成表达式
  4. 自制Python函数帮助查询小工具
  5. 一个Python程序员的进化
责任编辑:陈贻新 来源: Coder Lee博客
相关推荐

2010-03-24 08:55:02

Python编程语言

2020-05-28 08:29:54

目录脚本测试

2020-07-16 15:10:49

Pythonzip()可迭代对象

2009-11-30 17:00:05

VS2003窗口

2012-05-07 13:13:03

Python

2023-12-30 08:34:32

开发apkUri

2010-03-12 18:42:58

Python目录

2012-12-28 14:28:26

Android开发

2011-09-07 09:44:32

SQL Server还原

2009-09-28 10:28:04

Linux删除目录子目录

2010-03-23 15:52:43

Python操作文件

2009-12-08 12:06:03

linux当前目录文件数

2012-02-20 23:16:42

Linux

2017-06-09 13:51:42

Linux命令删除文件

2020-07-13 08:12:32

Linux命令浏览器

2020-07-13 23:42:27

Linux目录命令

2011-02-25 11:06:45

Proftpf

2011-03-25 11:28:34

Cactirra目录

2023-07-25 19:36:54

2019-04-17 08:00:00

Linuxrestic目录
点赞
收藏

51CTO技术栈公众号