踏实,努力向上!

从文件夹拷贝文件

上一篇 / 下一篇  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学习

 

评分:0

我来说两句

Open Toolbar