第一个自己写的python程序:windows下备份文件

完成1.0版本,学到不少东西,感谢唐唐。

查看系统PATH变量的值:

wmic ENVIRONMENT where "name='path' and UserName='<system>'" get VariableValue /value

在windows系统变量PATH里增加:D:\Program Files (x86)\WinRAR;D:\Python27

wmic ENVIRONMENT where "name='path' and UserName='<system>'" set VariableValue = "%PATH%;D:\Program Files (x86)\WinRAR;D:\Python27"
注意:Windows 7里这个命令不能直接在cmd.exe里执行,会提示拒绝访问的错误,以管理员身份登录也不行。我的解决方法是以管理员身份运行C:\Windows\SysWOW64\cmd.exe。


程序代码:

# -*- coding: cp936 -*-
# Filename: backup_ver1.0.py
'''Windows系统下的文件备份脚本

在Windows系统下通过调用winrar的rar.exe,备份由参数指定的目录或文件。
备份文件的文件名里包含当天的日期。
'''

import os
import time
import sys


def backup():
     '''执行备份操作
     '''
     
     # 如果目录不存在就建立
     if not os.path.exists(target_dir):
         os.mkdir(target_dir)

     # 用winrar的rar命令压缩文件
     zip_command = "rar a %s %s" %(target_dir + target_file, source)

     # 执行压缩打包命令
     if os.system(zip_command)==0:
         print('备份成功')
     else:
         print('备份失败')


if __name__ == "__main__":
	
	# 定义备份文件存放目录和文件名
	target_dir = 'D:\\backup\\'
	target_file = 'web_backup_' +  time.strftime('%Y%m%d') + '.rar'

	# 获取程序参数
	if len(sys.argv) < 2:
		print '没有指定参数'
		sys.exit()

	if sys.argv[1].startswith('--'):
		#抓取第1个参数--后面的字符串
		option = sys.argv[1][2:]
		if option == 'version':
			print 'Version 1.0'
			sys.exit()
		elif option == 'help':
			print '''\
在Windows系统下通过调用winrar的rar.exe,备份由参数指定的目录或文件。
执行程序前需要把rar.exe的路径加入PATH变量。
备份文件的文件名里包含当天的日期。
备份到D:\backup\目录下。
 --version : 输出版本号
--help    : 输出帮助信息'''
			sys.exit()
		else:
			print '未知参数'
			sys.exit()
	else:
		source = ''
		for filename in sys.argv[1:]:
			print filename
			source += ' '+filename
			print 'source = ', source, '\n'

	# 确认PATH变量里是否有winrar目录
	path_value = os.popen('wmic ENVIRONMENT where "name=\'path\'" get VariableValue /value')
	have_rar = path_value.read().find('WinRAR')
	if have_rar == '-1':
		print '请在系统PATH变量里设置WinRAR的路径'
		sys.exit()

	backup()


1.1版本

# -*- coding: cp936 -*-
# Filename: backup_ver1.0.py
'''Windows系统下的文件备份脚本

在Windows系统下通过调用winrar的rar.exe,备份由参数指定的目录或文件。
备份文件的文件名里包含当天的日期。
通过参数传递变量值到backup()
'''

import os
import time
import sys


def backup(target_dir, target_file, source):
     '''执行备份操作
     '''
     
     # 如果目录不存在就建立
     if not os.path.exists(target_dir):
         os.mkdir(target_dir)

     # 用winrar的rar命令压缩文件
     zip_command = "rar a %s %s" %(target_dir + target_file, source)

     # 执行压缩打包命令
     if os.system(zip_command)==0:
         print('备份成功')
     else:
         print('备份失败')


if __name__ == "__main__":

	# 获取程序参数
	if len(sys.argv) < 2:
		print '没有指定参数'
		sys.exit()

	if sys.argv[1].startswith('--'):
		#抓取第1个参数--后面的字符串
		option = sys.argv[1][2:]
		if option == 'version':
			print 'Version 1.0'
			sys.exit()
		elif option == 'help':
			print '''\
在Windows系统下通过调用winrar的rar.exe,备份由参数指定的目录或文件。
执行程序前需要把rar.exe的路径加入PATH变量。
备份文件的文件名里包含当天的日期。
备份到D:\backup\目录下。
--version : 输出版本号
--help    : 输出帮助信息'''
			sys.exit()
		else:
			print '未知参数'
			sys.exit()
	else:
		source = ''
		for filename in sys.argv[1:]:
			print filename
			source += ' '+filename
			print 'source = ', source, '\n'

	# 确认PATH变量里是否有winrar目录
	path_value = os.popen('wmic ENVIRONMENT where "name=\'path\'" get VariableValue /value')
	have_rar = path_value.read().find('WinRAR')
	if have_rar == '-1':
		print '请在系统PATH变量里设置WinRAR的路径'
		sys.exit()

	# 定义备份文件存放目录和文件名
	bak_dir = 'D:\\backup\\'
	bak_file = 'web_backup_' +  time.strftime('%Y%m%d') + '.rar'

	backup(bak_dir, bak_file, source)

输出:

1.txt
source =   1.txt

2.txt
source =   1.txt 2.txt


RAR 4.10 beta 5    版权 (C) 1993-2011 Alexander Roshal    15 十二月 2011
共享版本         输入 RAR -? 获得帮助

评估版本,请注册

正在更新  压缩文件 D:\backup\web_backup_20120111.rar

正在更新  2.txt                                                       完成
正在添加    1.txt                                                       完成
完成
备份成功


1.2版本:

# -*- coding: cp936 -*-
# Filename: backup_ver1.2.py
'''Windows系统下的文件备份脚本

在Windows系统下备份由参数指定的文件,不能备份目录。
备份文件的文件名里包含当天的日期。
1.1 通过参数传递变量值到backup()。
1.2 用zipfile模块替换rar.exe,判断被压缩文件是否存在
'''

import os
import time
import sys
import zipfile


def backup(target_dir, target_file, source):
	'''执行备份操作
	'''
		 
	# 如果目录不存在就建立
	if not os.path.exists(target_dir):
		os.mkdir(target_dir)

	filename = target_dir + target_file

	# 用zipfile模块压缩文件
	# zipfile每次只能把1个文件加入zip文件,所以写入多个文件时用'a'模式,而不是'w'模式
	z = zipfile.ZipFile(filename, mode="a")

	for sourcefile in source:
		# 判断文件是否存在
		if os.path.exists(sourcefile):
			res = z.write(sourcefile)
			print sourcefile, "压缩成功"
			#print res
		else :
			print sourcefile, "文件或目录不存在"
			
	z.close()

	# 判断压缩文件是否存在
	if os.path.getsize(filename) == 0:
		print('备份失败')
	else:
		print('备份成功')


if __name__ == "__main__":

	# 获取程序参数
	if len(sys.argv) < 2:
		print '没有指定参数'
		sys.exit()

	if sys.argv[1].startswith('--'):
		#抓取第1个参数--后面的字符串
		option = sys.argv[1][2:]
		if option == 'version':
			print 'Version 1.0'
			sys.exit()
		elif option == 'help':
			print '''\
在Windows系统下通过通过ZIP打包的方式备份由参数指定的目录或文件。
备份文件的文件名里包含当天的日期。
备份到D:\backup\目录下。
--version : 输出版本号
--help    : 输出帮助信息'''
			sys.exit()
		else:
			print '未知参数'
			sys.exit()

	# 定义备份文件存放目录和文件名
	bak_dir = 'D:\\backup\\'
	bak_file = 'web_backup_' +  time.strftime('%Y%m%d') + '.zip'

	backup(bak_dir, bak_file, sys.argv[1:])

1.3版本

# -*- coding: cp936 -*-
# Filename: backup_ver1.3.py
'''Windows系统下的文件备份脚本

在Windows系统下用tarfile模块备份由参数指定的目录或文件。
备份文件的文件名里包含当天的日期。
1.1 通过参数传递变量值到backup()。
1.2 用zipfile模块替换rar.exe,判断被压缩文件是否存在
1.3 改用tarfile模块,先对所有文件和目录做tar包,再对tar包压缩
'''

import os
import time
import sys
import tarfile


# 因为压缩目标可能是多个目录,所以先用tar打包,再调用gz/bzip2对tar包做压缩
def backup(target_dir, target_file, source, compression):
	'''执行备份操作
	'''
		 
	# 如果目录不存在就建立
	if not os.path.exists(target_dir):
		os.mkdir(target_dir)


	# 连结备份文件的目录名和文件名
	# 以下两个语句的效果相同
	#dist_tar_full_path_filename = '%s%s.tar' % (target_dir, target_file)
	dist_tar_full_path_filename = target_dir + target_file + ".tar"

	out = tarfile.TarFile.open(dist_tar_full_path_filename, 'a')

	# 用tar对目标文件或目录列表进行打包
	for sourcefile in source:
		print sourcefile
		if os.path.exists(sourcefile):
			out.add(sourcefile)
			print sourcefile, "压缩成功"
		else:
			print sourcefile, "不存在"

	# tar打包过程结束
	out.close( )


	# 判断是否对tar包进行压缩
	# print "compression = ", compression
	if compression:
		# 压缩后的文件名
		dist_compress_file = dist_tar_full_path_filename  + "." + compression

		# 对tar包进行压缩
		out = tarfile.TarFile.open(dist_compress_file, 'w:'+compression)
		out.add(dist_tar_full_path_filename)
		out.close()
		
		# 判断压缩后的文件是否存在
		if os.path.getsize(dist_compress_file) == 0:
			print('备份失败')
		else:
			print('备份成功')
			# 删除tar包
			os.remove(dist_tar_full_path_filename)
	else:
		# 判断tar包是否存在
		if os.path.getsize(dist_tar_full_path_filename) == 0:
			print('备份失败')
		else:
			print('备份成功')



if __name__ == "__main__":

	# 获取程序参数
	if len(sys.argv) < 2:
		print '没有指定参数'
		sys.exit()

	if sys.argv[1].startswith('--'):
		#抓取第1个参数--后面的字符串
		option = sys.argv[1][2:]
		if option == 'version':
			print 'Version 1.0'
			sys.exit()
		elif option == 'help':
			print '''\
在Windows系统下通过通过打包的方式备份由参数指定的目录或文件。
备份文件的文件名里包含当天的日期。
备份到D:\backup\目录下。
--version : 输出版本号
--help    : 输出帮助信息'''
			sys.exit()
		else:
			print '未知参数'
			sys.exit()

	# 定义备份文件存放目录和文件名
	bak_dir = 'D:\\backup\\'
	bak_file = 'web_backup_' +  time.strftime('%Y%m%d')

	backup(bak_dir, bak_file, sys.argv[1:], "gz")









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值