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

时间:2022-03-28 04:27:33

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

by:授客 QQ:1033553122

测试环境:

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:\svn\myfolder\base'.replace('\b',

'/b'
),'D:\svn\myfolder\dirname')

delete_file('D:\svn\myfolder\dirname\V8.3')


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