NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

itools.py (1887B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\devtools\script\itools.py
      2 from future.utils import raise_
      3 revision = 5
      4 import os
      5 import types
      6 
      7 def relpath(target, base = os.curdir):
      8     if not os.path.exists(target):
      9         raise_(OSError, 'Target does not exist: ' + target)
     10     if not os.path.isdir(base):
     11         raise_(OSError, 'Base is not a directory or does not exist: ' + base)
     12     base_list = os.path.abspath(base).split(os.sep)
     13     target_list = os.path.abspath(target).split(os.sep)
     14     if base_list[0].lower() != target_list[0].lower():
     15         raise_(OSError, 'Target is on a different drive to base. Target: ' + target_list[0].lower() + ', base: ' + base_list[0].lower())
     16     for i in range(min(len(base_list), len(target_list))):
     17         if base_list[i].lower() != target_list[i].lower():
     18             break
     19     else:
     20         i += 1
     21 
     22     rel_list = [os.pardir] * (len(base_list) - i) + target_list[i:]
     23     return os.path.join(*rel_list)
     24 
     25 
     26 def walktree(dir, filecallback, dircallback = None, recursive = True):
     27     files = os.listdir(dir)
     28     for file in files:
     29         entry = os.path.join(dir, file)
     30         if os.path.isdir(entry):
     31             if recursive:
     32                 walktree(entry, filecallback, dircallback)
     33         elif callable(filecallback):
     34             filecallback(entry)
     35 
     36     if callable(dircallback):
     37         dircallback(dir)
     38 
     39 
     40 def itertree(dir, files = True, dirs = False, recursive = True):
     41     files = os.listdir(dir)
     42     for file in files:
     43         entry = os.path.join(dir, file)
     44         if os.path.isdir(entry):
     45             if recursive:
     46                 for x in itertree(entry, files, dirs):
     47                     yield x
     48 
     49             if dirs:
     50                 yield (1, entry)
     51         elif files:
     52             yield (0, entry)
     53 
     54 
     55 def listify(arg):
     56     if type(arg) != types.ListType:
     57         return [arg]
     58     return arg