练手小项目二:指定目录树下,选择性拷贝指定类型文件,至指定的一个文件夹
'''此函数作用:选择性复制某目录树下的指定扩展名文件至指定同一目录'''
#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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。