测试环境:
Python版本:Python 3.3.2
Win7 64
代码实践
#!/usr/bin/env/ python # -*- coding:utf-8 -*- __author__ = 'shouke' import os import subprocess # 复制文件或目录到指定目录(非自身目录) def copy_dir_or_file(src, dest): if not os.path.exists(dest): print('目标路径:%s 不存在' % dest) return [False, '目标路径:%s 不存在' % dest] elif not os.path.isdir(dest): print('目标路径:%s 不为目录' % dest) return [False, '目标路径:%s 不为目录' % dest] elif src.replace('/', '\').rstrip('\') == dest.replace('/', '\').rstrip('\'): print('源路径和目标路径相同,无需复制') return [True,'源路径和目标路径相同,不需要复制'] if not os.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: with subprocess.Popen(args, shell=True, universal_newlines = True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc: output = proc.communicate() print('复制文件操作输出:%s' % str(output)) if not output[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])] except Exception as e: print('复制目标文件|目录(%s) 到目标目录(%s)失败 %s' % (src, dest, e)) return [False, '复制目标文件|目录(%s) 到目标目录(%s)失败 %s' % (src, dest, e)] # 删除指定目录及其子目录下的所有子文件,不删除目录 def delete_file(dirpath): if not os.path.exists(dirpath): print('要删除的目标路径:%s 不存在' % dirpath) return [False, '要删除的目标路径:%s 不存在' % dirpath] elif not os.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: with subprocess.Popen(args, shell=True, universal_newlines = True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc: output = proc.communicate() print('删除目标目录下的文件,操作输出:%s' % str(output)) if not output[1]: print('删除目标目录(%s)下的文件成功' % dirpath) return [True,'删除成功'] else: print('删除目标目录(%s)下的文件失败:%s' % (dirpath, output[1])) return [True,'删除目标目录(%s)下的文件失败:%s' % (dirpath, output[1])] except Exception as e: print('删除目标目录(%s)下的文失败:%s' % (dirpath,e)) return [False, '删除目标目录(%s)下的文失败:%s' % (dirpath,e)] if __name__ == '__main__': copy_dir_or_file('D:svnmyfolderbase'.replace('b', '/b'),'D:svnmyfolderdirname') delete_file('D:svnmyfolderdirnameV8.3')
注意:不支持把目录及其子文件复制到其子目录