1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#encoding: utf-8
#author: walker
#date: 2017-06-15
#summary: 自定义文件夹处理函数,适用于python3.5+
import
os
import
shutil
import
win32com.client
#清空目录
def
ClearDir(
dir
):
print
(
'ClearDir '
+
dir
+
'...'
)
for
entry
in
os.scandir(
dir
):
if
entry.name.startswith(
'.'
):
continue
if
entry.is_file():
os.remove(entry.path)
#删除文件
else
:
shutil.rmtree(entry.path)
#删除目录
#获取目录大小
#不存在或空目录都返回0
def
GetDirSize(pathdir):
if
not
os.path.exists(pathdir):
print
(
'Warning: not exists %s'
%
pathdir)
return
0
fso
=
win32com.client.Dispatch(
'Scripting.FileSystemObject'
)
folder
=
fso.GetFolder(pathdir)
return
folder.Size
'''
# 合并源目录到目标目录,源目录中的空目录不会被处理
# src_dir: 源目录
# dst_dir: 目标目录
# reserve_src: 是否保留源数据
# override: 是否覆盖目标目录中的文件
'''
def
MergeDir(src_root, dst_root, reserve_src
=
True
, override
=
True
):
if
(
not
os.path.exists(src_root))
or
(
not
os.path.exists(dst_root)):
#目录不存在
raise
FileNotFoundError
for
parent, dirnames, filenames
in
os.walk(src_root):
for
filename
in
filenames:
src_file
=
os.path.join(parent, filename)
dst_file
=
os.path.join(dst_root, src_file[
len
(src_root)
+
1
:])
if
os.path.exists(dst_file)
and
(
not
override):
#如果目标文件存在且不能被覆盖
continue
dst_dir
=
os.path.dirname(dst_file)
if
not
os.path.exists(dst_dir):
os.makedirs(dst_dir)
if
reserve_src :
#保留源数据
shutil.copyfile(src_file, dst_file)
#会覆盖目标文件
else
:
shutil.move(src_file, dst_file)
if
not
reserve_src:
shutil.rmtree(src_root)
#删除源根目录
|
相关链接:
*** walker ***
本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1936982如需转载请自行联系原作者
RQSLT