博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python备份目录及目录下的全部内容
阅读量:6234 次
发布时间:2019-06-22

本文共 2712 字,大约阅读时间需要 9 分钟。

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

本来是想写一个东西可以直接调用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,如有问题敬请指正!谢谢。 

 

 

转载地址:http://ltqna.baihongyu.com/

你可能感兴趣的文章
高速无线网络:现实还是科幻?
查看>>
《C语言课程设计》一2.4 表达式和基本语句
查看>>
第一次参加就甩开IBM 阿里云成为国际顶级竞技手
查看>>
搭建B2P风控体系 破题分布式光伏融资难题
查看>>
大白话解释模型产生过拟合的原因!
查看>>
感知时代 智造中国 ——首届中国智谷大会际会风云
查看>>
移动物联网的Arduino开发板:Particle推出Electron
查看>>
校企联合,走大数据职业人才培养创新之路
查看>>
德勤报告:如何利用区块链调查客户忠诚度
查看>>
储能在多能互补集成优化中的应用
查看>>
阿里云牵手新加坡EZ-Link卡 日均交易超800万笔
查看>>
天天算法 LeetCode-216-组合总和 III
查看>>
spring data mongodb配置+月库实现
查看>>
19-05-09
查看>>
GMQ Group交易所让交易更自由,让投资更具多元化
查看>>
[译]13 种有用的 JavaScript DOM 操作
查看>>
媒体查询结合rem布局适配手机屏幕
查看>>
查询单表中多个字段同时重复的数据
查看>>
Java中两个判断字符串是否为空的方法的执行效率比较的代码
查看>>
OC方式简单实现几种快速排序和冒泡排序
查看>>