注册 登录
编程论坛 Python论坛

一个文件备份程序有错

fenghelong 发布于 2012-04-12 01:41, 1652 次点击
程序代码:
import os
import time
source=[r'e:\backup']
target_dir=[r'e:\satan']
today=target_dir+time.strftime('%Y%m%d')
now=time.strftime('%H%M%S')
if not os.paht.exists(today):
    os.mkdir(today)
    print 'successfully created directory',today
target=today+os.sep+now+'.zip'
zip_command="zip -qr '%s' %s" %(target,' '.join(source))
if os.system(zip_command)==0:
    print 'successful backup to',target
else:
    print 'back failed'
出现的错误是:
Traceback (most recent call last):
  File "C:/Users/fenghelong/Desktop/python操作/backup_ver2.py", line 5, in <module>
    today=target_dir+time.strftime('%Y%m%d')
TypeError: can only concatenate list (not "str") to list
8 回复
#2
为Jay沉沦2012-04-12 20:56
你这个程序里存在三个问题:
(1)source和target_dir都是列表类型(list),而time.strftime('%Y%m%d')是字符串类型,list类型不可以和字符串类型直接相加,修改方法:target_dir='e:\\satan';
(2)if not os.paht.exists(today):应该是path,拼写错误;
(3)zip_command="zip -qr '%s' %s" %(target,' '.join(source)),这个在Linux下应该没问题,可是windows下不成功,也有可能是路径不对,我正在探索中,希望尽快可以给你答案。
#3
为Jay沉沦2012-04-12 21:33
我找到办法啦
zip_command是这个程序的重点,它包含我们将要执行的命令,你可以在shell(Linux终端中)运行它,以检验它是否工作。但在DOS提示中不一定能执行,必须安装zip,必须能执行zip命令。在网上浏览的时候发现很多人反映zip中的参数设置也较为麻烦,我也没搞懂。就选择了WinRAR,反正是能达到压缩文件的目的。
import os
import time
source=r'D:\backup'
target_dir='D:\\satan\\'
today=target_dir+time.strftime('%Y%m%d')
now=time.strftime('%H%M%S')
if not os.path.exists(today):
    os.mkdir(today)
    print 'successfully created directory',today
target=today+os.sep+now+'.rar'
rar_command = 'rar a {0} {1}'.format(target,source)
if os.system(rar_command)==0:
    print 'successful backup to',target
else:
    print 'back failed'
然后就完美解决了,hah
#4
为Jay沉沦2012-04-12 22:02
操作步骤:
当然啦!你肯定得安装WinRAR啦!
1.将C:\Program Files\WinRAR下的Rar.exe拷贝到%SystemRoot%\system32下,这样你就不必设置rar的环境变量,而能直接再cmd 命令提示符下使用rar命令。
(我的WinRAR路径: C:\Program Files\WinRAR\WinRAR.exe )
2.在命令提示符中测试rar_command命令,能执行则以上代码就没有问题了
#5
fenghelong2012-04-13 17:18
回复 4楼 为Jay沉沦
target_dir='D:\\satan\\'这个地方为什么要有两个\\
还有,rar_command = 'rar a {0} {1}'.format(target,source)这个是什么意思。
谢谢哇。
#6
为Jay沉沦2012-04-13 18:01
target_dir='D:\\satan\\'这个地方为什么要有两个\\
这个涉及到转义字符,如果不用两个\\,路径就会出错,你也可以用target_dir=r'D:\satan\'
例子:
print 'D:\\satan\\'
D:\satan\
print 'D:\satan\'
SyntaxError: EOL while scanning string literal

因为你的dos自身可能没有带zip,si所以要用WinRA,它有相同的功能
'rar a {0} {1}'.format(target,source):是cmd 命令提示符下使用rar命令
rar命令用法格式:
     rar <命令> -<开关 1> -<开关 N> <压缩文件> <文件...>
             <@列表文件...> <解压路径\>
命令行书写格式解读:
rar 命令参数 开关参数 压缩文件名 要压缩的文件或者@包含文件列表的文件名 解压目录\
其中,开关参数可以有多个,前面要加连接号"-";如果自定义解压目录,在目录后面要添加反斜杠\;不能同时使用两个命令参数,如在添加文件压缩的同时添加注释内容。开关参数可以同时使用多个。
用法举例:
rar a tupian.rar //添加当前目录下所有的文件到压缩文件tupian.rar中,并进行压缩。
#7
fenghelong2012-04-13 19:20
回复 6楼 为Jay沉沦
不错啊,加个QQ啊。
#8
为Jay沉沦2012-04-13 19:48
670578151,我也才学不久,多多交流哈!
#9
岁月无真2012-04-15 21:15
学习了,不错!
1