PathConvert.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import os
  4. from . import Debug
  5. import platform
  6. def GetExtension(path):
  7. """
  8. 获得扩展名
  9. """
  10. return os.path.splitext(path)[1]
  11. def GetNameNotExtension(path):
  12. """
  13. 获得无扩展名的文件名
  14. """
  15. return os.path.splitext(path)[0]
  16. def FindAllFiles(path, extensions=None, startPath=None):
  17. """
  18. 获得所有文件路径
  19. path 可以是文件或目录
  20. extensions 是List类型 为None时,默认获得所有文件
  21. startPath 为None时,返回的是文件的绝对路径
  22. """
  23. _ls = []
  24. if os.path.isfile(path):
  25. extension = GetExtension(path).lower()
  26. if extensions is None:
  27. if startPath is None:
  28. _ls.append(PathFormatUTF8(path))
  29. else:
  30. _ls.append(PathFormatUTF8(os.path.relpath(path, startPath)))
  31. else:
  32. if extension in extensions:
  33. if startPath is None:
  34. _ls.append(PathFormatUTF8(path))
  35. else:
  36. _ls.append(PathFormatUTF8(
  37. os.path.relpath(path, startPath)))
  38. elif os.path.isdir(path):
  39. for childPath in os.listdir(path):
  40. children = FindAllFiles(os.path.join(
  41. path, childPath), extensions, startPath)
  42. if children:
  43. _ls.extend(children)
  44. else:
  45. Debug.Log("%s路径不存在" % path)
  46. raise Exception
  47. return _ls
  48. def DeletePathAll(path):
  49. """
  50. 删除文件或文件夹
  51. """
  52. if os.path.isfile(path):
  53. os.remove(path)
  54. elif os.path.isdir(path):
  55. for childPath in os.listdir(path):
  56. DeletePathAll(os.path.join(path, childPath))
  57. os.rmdir(path)
  58. elif not os.path.exists(path):
  59. pass
  60. else:
  61. Debug.Log("%s路径有问题,别动,请找程序查看" % path)
  62. raise Exception
  63. def DeletePathUtilIsNone(path, untilPath=None):
  64. """
  65. 删除路径,如果当前路径文件夹中为空,会迭代删除文件夹
  66. 直到untilPath为止
  67. untilPath 默认为None, 代表直到找到不为空的父路径停止删除
  68. """
  69. deletes = []
  70. if os.path.isfile(path):
  71. os.remove(path)
  72. deletes.append(path)
  73. deletes.extend(DeletePathUtilIsNone(os.path.dirname(path), untilPath))
  74. elif os.path.isdir(path):
  75. if len(os.listdir(path)) <= 0:
  76. if untilPath is None or path != untilPath:
  77. os.rmdir(path)
  78. deletes.append(path)
  79. deletes.extend(DeletePathUtilIsNone(
  80. os.path.dirname(path), untilPath))
  81. elif not os.path.exists(path):
  82. pass
  83. else:
  84. Debug.Log("%s路径有问题,别动,请找程序查看" % path)
  85. raise Exception
  86. return deletes
  87. def DeletePathUtilIsNoneOnUnityProject(path, untilPath=None):
  88. """
  89. 删除路径,如果当前路径文件夹中为空,会迭代删除文件夹
  90. 直到untilPath为止
  91. untilPath 默认为None, 代表直到找到不为空的父路径停止删除
  92. 类似DeletePathUtilIsNone,区别在于这里还会判断unity3d的.meta文件
  93. """
  94. deletes = []
  95. if os.path.isfile(path):
  96. os.remove(path)
  97. deletes.append(path)
  98. metafile = path + '.meta'
  99. if os.path.exists(metafile):
  100. os.remove(metafile)
  101. deletes.append(metafile)
  102. deletes.extend(DeletePathUtilIsNoneOnUnityProject(
  103. os.path.dirname(path), untilPath))
  104. elif os.path.isdir(path):
  105. if len(os.listdir(path)) <= 0:
  106. if untilPath is None or path != untilPath:
  107. os.rmdir(path)
  108. deletes.append(path)
  109. metafile = path + '.meta'
  110. if os.path.exists(metafile):
  111. os.remove(metafile)
  112. deletes.append(metafile)
  113. deletes.extend(DeletePathUtilIsNoneOnUnityProject(
  114. os.path.dirname(path), untilPath))
  115. elif not os.path.exists(path):
  116. pass
  117. else:
  118. Debug.Log("%s路径有问题,别动,请找程序查看" % path)
  119. raise Exception
  120. return deletes
  121. def DirNotExistAndCreate(dirPath):
  122. """
  123. 判断目录是否存在,不存在则创建出来
  124. """
  125. if not os.path.exists(dirPath):
  126. parentDirPath = os.path.dirname(dirPath)
  127. if not os.path.exists(parentDirPath):
  128. DirNotExistAndCreate(parentDirPath)
  129. os.makedirs(dirPath)
  130. def PathFormatUTF8(path):
  131. platformName = platform.system()
  132. if platformName == 'Linux':
  133. return path
  134. elif platformName == 'Windows':
  135. return path.decode('gb2312')
  136. elif platformName == 'Darwin':
  137. return path
  138. else:
  139. return path