踏实,努力向上!
从文件夹拷贝文件
上一篇 /
下一篇 2009-01-19 00:01:41
/ 个人分类:python学习
今天做这个例子,真是郁闷死了,遇到一问题怎么也解决不了。直到现在也解决不了,狭死瞎黄穑故钦庋?/P>
先发这个东西上来:
import os
import time
from os import listdir
from os.path import isdir
#source = ['/home/swaroop/byte', '/home/swaroop/bin']
source = 'D:\\python test'
target_dir = 'D:\\python test2'
now = time.strftime('%Y%m%d')
if isdir(source) != True:
print('Error: source is not a directory')
exit()
k=0
filelist = listdir(source)
print(filelist)
t = 0
for name in filelist :
if name.find('txt') == -1 and name.find('png') == -1 :
del(filelist[t])
t = t + 1
print(filelist)
#exit()
for name in filelist :
srcFilename = source + '\\' + name
srcFilename = '"' + srcFilename + '"'
desFilename = target_dir + '\\' + now + '_' + name
desFilename = '"' + desFilename + '"'
copy_command = "copy %s %s" % (srcFilename, desFilename)
print(copy_command)
if os.system(copy_command) == 0:
k = k + 1
print('Successful backup to copy from', srcFilename, 'to' ,desFilename)
else:
print('Fail to copy', srcFilename, 'to', desFilename)
print('total copy', k, 'files')
我原来是想拷贝txt , png的文件到目标文件夹,源文件夹中有txt,png,py后缀的文件若干过,就是去掉不匹配txt,png的。
可是结果,txt,png的都拷了,这没错,可是py也还是有。真郁闷。怎么调都不行。
t = 0
for name in filelist :
if name.find('txt') == -1 and name.find('png') == -1 :
del(filelist[t])
t = t + 1
问题肯定出现这里,这里从数组filelist中del了一个py文件后,整个数组就重新排了,就如执行到1时,去掉一个py文件,但原来位置在2的py文件在新数组中变成了位置1,但循环却又从2开始了,所以不再执行1了,就漏掉检测这一个了。
这里导致的结果就是删了一个不匹配的文件后,总会导致下一个漏掉检测,整个结果就会出现比原来想要的多了几个。
这里一直找不到怎么解决。只好有待解决了。
2008-1-19号
问题终于解决了,得到了想要的结果.答案是不能这样操作,在循环中del就有错的。高手一看就知道我错在哪里了,他只稍微修改了另一种方式就可以了。
filelist2 = []
for name in filelist :
if name.find('txt') >=0 or name.find('png') >=0 :
filelist2.append(name)
增加一个空数组,只要匹配的就放到这个数组中,这样不会改变原来的。name.find('txt') >=0表示匹配。
这样终于解决问题了。其实很简单。
收藏
举报
TAG:
python学习