matinal:Python实现文件夹的拷贝覆盖

2023-10-14 14:04:25 浏览数 (3)

项目有个脚本,操作【文件/文件夹】用的【cp/rm】命令(平时在Mac上使用),现在要在Windows上也能使用,便用Python重写了下,文件/文件夹操作这部分封装了几个函数,做个记录以备后查。

代码语言:javascript复制
# -*- coding:UTF-8 -*-
#ipath
 
import os,os.path
import shutil
 
#拷贝目录【类似unix下的cp -r aa bb】
def copyDir(srcDir,dstDir):
    if os.path.exists(srcDir):
        __copyDir(srcDir,dstDir)
    else:
        print(srcDir ' not exist')
 
def __copyDir(srcDir,dstDir):
    if not os.path.exists(dstDir):
        shutil.copytree(srcDir,dstDir)
        return
    lists=os.listdir(srcDir)
    for lt in lists:
        srcPath=os.path.join(srcDir,lt)
        goalPath=os.path.join(dstDir,lt)
        if os.path.isfile(srcPath):
            shutil.copyfile(srcPath,goalPath)
        else:
            __copyDir(srcPath,goalPath)
 
#拷贝目录下指定类型文件【类似unix下的cp aa/*.xx bb】
def copyDirExtFiles(srcDir,dstDir,ext,recursion=False):
    if os.path.exists(srcDir):
        __copyDirExtFiles(srcDir,dstDir,ext,recursion)
    else:
        print(srcDir ' not exist')
 
def __copyDirExtFiles(srcDir,dstDir,ext,recursion=False):
    if not os.path.exists(dstDir):
        os.mkdir(dstDir)
    lists=os.listdir(srcDir)
    for lt in lists:
        srcPath=os.path.join(srcDir,lt)
        goalPath=os.path.join(dstDir,lt)
        if os.path.isfile(srcPath):
            tu=os.path.splitext(srcPath)
            if tu[1]==ext:
                shutil.copyfile(srcPath,goalPath)
        elif recursion==True :
            __copyDirExtFiles(srcPath,goalPath,ext,recursion)
 
#删除文件夹下指定类型文件【类型unix下的 rm aa/*.xx】
def delExtFiles(srcDir,ext,recursion=False):
    lists=os.listdir(srcDir)
    for lt in lists:
        srcPath=os.path.join(srcDir,lt)
        if os.path.isfile(srcPath):
            tu=os.path.splitext(lt)
            if tu[1]==ext:
                os.remove(srcPath)
        elif recursion==True:
            delExtFiles(srcPath,ext,recursion)
 
#删除文件夹下所有文件【类似unix下的 rm -r aa/bb】
def rmDirAllFiles(dstDir):
    lists=os.listdir(dstDir)
    for lt in lists:
        srcPath=os.path.join(dstDir,lt)
        if os.path.isfile(srcPath):
            os.remove(srcPath)
        else:
            shutil.rmtree(srcPath)
 
#复制文件
def copyFile(srcFile,dstFile):
    if os.path.isfile(srcFile):
        shutil.copyfile(srcFile,dstFile)
 
#复制文件到指定目录【类似unix下 cp .xx bb】
def copyFileToDir(srcFile,dstDir):
    if os.path.isfile(srcFile):
        tu=os.path.split(srcFile)
        copyFile(srcFile,os.path.join(dstDir,tu[1]))
 
#删除文件【类似unix下 rm aa.xx】
def rmFile(fullPath):
    if os.path.isfile(fullPath):
        os.remove(fullPath)
 
#删除文件夹【类似unix下 rm -r aa】
def rmFloder(dstDir):
    if os.path.exists(dstDir):
        shutil.rmtree(dstDir)

1 人点赞