#!/usr/bin/python # -*- coding: utf-8 -*- import os from . import Debug import platform def GetExtension(path): """ 获得扩展名 """ return os.path.splitext(path)[1] def GetNameNotExtension(path): """ 获得无扩展名的文件名 """ return os.path.splitext(path)[0] def FindAllFiles(path, extensions=None, startPath=None): """ 获得所有文件路径 path 可以是文件或目录 extensions 是List类型 为None时,默认获得所有文件 startPath 为None时,返回的是文件的绝对路径 """ _ls = [] if os.path.isfile(path): extension = GetExtension(path).lower() if extensions is None: if startPath is None: _ls.append(PathFormatUTF8(path)) else: _ls.append(PathFormatUTF8(os.path.relpath(path, startPath))) else: if extension in extensions: if startPath is None: _ls.append(PathFormatUTF8(path)) else: _ls.append(PathFormatUTF8( os.path.relpath(path, startPath))) elif os.path.isdir(path): for childPath in os.listdir(path): children = FindAllFiles(os.path.join( path, childPath), extensions, startPath) if children: _ls.extend(children) else: Debug.Log("%s路径不存在" % path) raise Exception return _ls def DeletePathAll(path): """ 删除文件或文件夹 """ if os.path.isfile(path): os.remove(path) elif os.path.isdir(path): for childPath in os.listdir(path): DeletePathAll(os.path.join(path, childPath)) os.rmdir(path) elif not os.path.exists(path): pass else: Debug.Log("%s路径有问题,别动,请找程序查看" % path) raise Exception def DeletePathUtilIsNone(path, untilPath=None): """ 删除路径,如果当前路径文件夹中为空,会迭代删除文件夹 直到untilPath为止 untilPath 默认为None, 代表直到找到不为空的父路径停止删除 """ deletes = [] if os.path.isfile(path): os.remove(path) deletes.append(path) deletes.extend(DeletePathUtilIsNone(os.path.dirname(path), untilPath)) elif os.path.isdir(path): if len(os.listdir(path)) <= 0: if untilPath is None or path != untilPath: os.rmdir(path) deletes.append(path) deletes.extend(DeletePathUtilIsNone( os.path.dirname(path), untilPath)) elif not os.path.exists(path): pass else: Debug.Log("%s路径有问题,别动,请找程序查看" % path) raise Exception return deletes def DeletePathUtilIsNoneOnUnityProject(path, untilPath=None): """ 删除路径,如果当前路径文件夹中为空,会迭代删除文件夹 直到untilPath为止 untilPath 默认为None, 代表直到找到不为空的父路径停止删除 类似DeletePathUtilIsNone,区别在于这里还会判断unity3d的.meta文件 """ deletes = [] if os.path.isfile(path): os.remove(path) deletes.append(path) metafile = path + '.meta' if os.path.exists(metafile): os.remove(metafile) deletes.append(metafile) deletes.extend(DeletePathUtilIsNoneOnUnityProject( os.path.dirname(path), untilPath)) elif os.path.isdir(path): if len(os.listdir(path)) <= 0: if untilPath is None or path != untilPath: os.rmdir(path) deletes.append(path) metafile = path + '.meta' if os.path.exists(metafile): os.remove(metafile) deletes.append(metafile) deletes.extend(DeletePathUtilIsNoneOnUnityProject( os.path.dirname(path), untilPath)) elif not os.path.exists(path): pass else: Debug.Log("%s路径有问题,别动,请找程序查看" % path) raise Exception return deletes def DirNotExistAndCreate(dirPath): """ 判断目录是否存在,不存在则创建出来 """ if not os.path.exists(dirPath): parentDirPath = os.path.dirname(dirPath) if not os.path.exists(parentDirPath): DirNotExistAndCreate(parentDirPath) os.makedirs(dirPath) def PathFormatUTF8(path): platformName = platform.system() if platformName == 'Linux': return path elif platformName == 'Windows': return path.decode('gb2312') elif platformName == 'Darwin': return path else: return path