| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1652 人关注过本帖
标题:一个文件备份程序有错
只看楼主 加入收藏
fenghelong
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
威 望:2
帖 子:209
专家分:197
注 册:2011-8-18
结帖率:26.67%
收藏
已结贴  问题点数:10 回复次数:8 
一个文件备份程序有错
程序代码:
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
2012-04-12 01:41
为Jay沉沦
Rank: 2
来 自:四川成都西南交大
等 级:论坛游民
帖 子:40
专家分:25
注 册:2009-3-22
收藏
得分:5 
你这个程序里存在三个问题:
(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下不成功,也有可能是路径不对,我正在探索中,希望尽快可以给你答案。

无与伦比,为杰沉沦!
2012-04-12 20:56
为Jay沉沦
Rank: 2
来 自:四川成都西南交大
等 级:论坛游民
帖 子:40
专家分:25
注 册:2009-3-22
收藏
得分:0 
我找到办法啦
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

无与伦比,为杰沉沦!
2012-04-12 21:33
为Jay沉沦
Rank: 2
来 自:四川成都西南交大
等 级:论坛游民
帖 子:40
专家分:25
注 册:2009-3-22
收藏
得分:0 
操作步骤:
当然啦!你肯定得安装WinRAR啦!
1.将C:\Program Files\WinRAR下的Rar.exe拷贝到%SystemRoot%\system32下,这样你就不必设置rar的环境变量,而能直接再cmd 命令提示符下使用rar命令。
(我的WinRAR路径: C:\Program Files\WinRAR\WinRAR.exe )
2.在命令提示符中测试rar_command命令,能执行则以上代码就没有问题了

无与伦比,为杰沉沦!
2012-04-12 22:02
fenghelong
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
威 望:2
帖 子:209
专家分:197
注 册:2011-8-18
收藏
得分:0 
回复 4楼 为Jay沉沦
target_dir='D:\\satan\\'这个地方为什么要有两个\\
还有,rar_command = 'rar a {0} {1}'.format(target,source)这个是什么意思。
谢谢哇。
2012-04-13 17:18
为Jay沉沦
Rank: 2
来 自:四川成都西南交大
等 级:论坛游民
帖 子:40
专家分:25
注 册:2009-3-22
收藏
得分:0 
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中,并进行压缩。

无与伦比,为杰沉沦!
2012-04-13 18:01
fenghelong
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
威 望:2
帖 子:209
专家分:197
注 册:2011-8-18
收藏
得分:0 
回复 6楼 为Jay沉沦
不错啊,加个QQ啊。
2012-04-13 19:20
为Jay沉沦
Rank: 2
来 自:四川成都西南交大
等 级:论坛游民
帖 子:40
专家分:25
注 册:2009-3-22
收藏
得分:0 
670578151,我也才学不久,多多交流哈!

无与伦比,为杰沉沦!
2012-04-13 19:48
岁月无真
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2012-4-13
收藏
得分:5 
学习了,不错!
2012-04-15 21:15
快速回复:一个文件备份程序有错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040161 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved