文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件
测试环境:
Python版本:Python3.3.2
Win7 64
代码实践
#!/usr/bin/env/ python
# -*- coding:utf-8 -*-
__author__ ='shouke'
importos
import subprocess
# 复制文件或目录到指定目录(非自身目录)
defcopy_dir_or_file(src, dest):
if notos.path.exists(dest):
print('目标路径:%s不存在'% dest)
return [False,'目标路径:%s不存在'% dest]
elif notos.path.isdir(dest):
print('目标路径:%s不为目录'% dest)
return [False,'目标路径:%s不为目录'% dest]
elifsrc.replace('/','\\').rstrip('\\') == dest.replace('/','\\').rstrip('\\'):
print('源路径和目标路径相同,无需复制')
return[True,'源路径和目标路径相同,不需要复制']
if notos.path.exists(src):
print('源路径:%s不存在'% src)
return [False,'源路径:%s不存在'% src]
# /E 复制目录和子目录,包括空的/Y无需确认,自动覆盖已有文件
args ='xcopy /YE '+ os.path.normpath(src) +' '+ os.path.normpath(dest)# 注意:xcopy不支持d:/xxx,只支持d:\xxxx,所以要转换
try:
withsubprocess.Popen(args,shell=True,universal_newlines=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)asproc:
output = proc.communicate()
print('复制文件操作输出:%s'%str(output))
if notoutput[1]:
print('复制目标文件|目录(%s)到目标目录(%s)成功'% (src, dest))
return[True,'复制成功']
else:
print('复制目标文件|目录(%s)到目标目录(%s)失败:%s'% (src, dest, output[1]))
return [False,'复制目标文件|目录(%s)到目标目录(%s)失败:%s'% (src, dest, output[1])]
exceptExceptionase:
print('复制目标文件|目录(%s)到目标目录(%s)失败%s'% (src, dest, e))
return [False,'复制目标文件|目录(%s)到目标目录(%s)失败%s'% (src, dest, e)]
# 删除指定目录及其子目录下的所有子文件,不删除目录
defdelete_file(dirpath):
if notos.path.exists(dirpath):
print('要删除的目标路径:%s不存在'% dirpath)
return [False,'要删除的目标路径:%s不存在'% dirpath]
elif notos.path.isdir(dirpath):
print('要删除的目标路径:%s不为目录'% dirpath)
return [False,'要删除的目标路径:%s不为目录'% dirpath]
# 注意:同xcopy命令,del也不支持d:/xxxx,Linux/Unix路径的写法,只支持d:\xxx windows路径的写法
args ='del /F/S/Q '+ os.path.normpath(dirpath) # /F 强制删除只读文件。/S删除所有子目录中的指定的文件。/Q安静模式。删除前,不要求确认
try:
withsubprocess.Popen(args,shell=True,universal_newlines=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)asproc:
output = proc.communicate()
print('删除目标目录下的文件,操作输出:%s'%str(output))
if notoutput[1]:
print('删除目标目录(%s)下的文件成功'% dirpath)
return[True,'删除成功']
else:
print('删除目标目录(%s)下的文件失败:%s'% (dirpath, output[1]))
return[True,'删除目标目录(%s)下的文件失败:%s'% (dirpath, output[1])]
exceptExceptionase:
print('删除目标目录(%s)下的文失败:%s'% (dirpath,e))
return [False,'删除目标目录(%s)下的文失败:%s'% (dirpath,e)]
if__name__ =='__main__':
copy_dir_or_file('D:\svn\myfolder\base'.replace('\b','/b'),'D:\svn\myfolder\dirname')
delete_file('D:\svn\myfolder\dirname\V8.3')
注意:不支持把目录及其子文件复制到其子目录