自定义文件夹处理函数(Python)

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)     #删除源根目录


相关链接:

1、pywin32下载

2、Python文件(夹)基本操作


*** walker ***

本文转自walker snapshot博客51CTO博客,原文链接http://blog.51cto.com/walkerqt/1936982如需转载请自行联系原作者

RQSLT
上一篇:基于hi-nginx的web开发(python篇)——表单处理和文件上传


下一篇:atsha204加密芯片——使用心得