Python 文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件

文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件

by:授客 QQ1033553122

测试环境:

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:svnmyfolderase'.replace('', '/b'),'D:svnmyfolderdirname')

    delete_file('D:svnmyfolderdirnameV8.3')

 

注意:不支持把目录及其子文件复制到其子目录

 

 

原文地址:https://www.cnblogs.com/shouke/p/10157543.html