练手小项目二:指定目录树下,选择性拷贝指定类型文件,至指定的一个文件夹

'''此函数作用:选择性复制某目录树下的指定扩展名文件至指定同一目录'''

#coding: utf-8
import os,shutil

#定义函数
def cp_file(orig,dest,kind):
    result=[];i=0
    for folder,subfolders,files in os.walk(orig):
        for file in files:
            if(file.endswith('.'+kind)):
                f=os.path.join(folder,file)
                result.append(f)
    print result
    for k in result:
        shutil.copy(k,dest);i+=1;print('copying',k);
    return i

#自测用例
#输入abc时,按照如下格式(转义反斜杠):E:\\mypractice,C:\\Users\\39419\\Desktop\\pic,jpg
a=raw_input('source:')
if os.path.exists(a) ==False:
     print(a,'is a false source');
b=raw_input('destination: ')
if os.path.exists(b)==False:
    os.makedirs(b)
    print('have created the selected path: ',b);
c=raw_input('kind of file :')

#正式调用函数
t=cp_file(a,b,c)
print(' have copied ',t,'files')  

总结反思:
1、之前由于对os.walk()的理解不透彻,导致if代码块下的路径一直纠结不对,运行结果为0。所以在此提醒和指出指出,这里的folder、sunfolder、file分别指每一次for循环时当前文件夹自己本身、当前文件夹的子文件夹、当前文件下的文件。
2、shutil模块用于复制移动改名删除文件,提醒:可删除非空文件、非空文件夹。而os模块只能删除空文件夹,文件不管空与否,皆可删。
3、构建有效路径的方式:a 直接赋值变量,如自测用例;b 调用os.path.join()来实现,如函数体中所示。
ps:第一次写博客,不足之处,还请轻喷指正:-D


upletter_Z
6 声望0 粉丝

愿人生如开发,没有致命bug!