utils.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #coding: utf-8
  2. #文件大小类
  3. class FileSize():
  4. SIZE_UNIT={"Byte":1,"KB":1024,"MB":1048576,"GB":1073741824,"TB":1099511627776L}
  5. def __init__(self,size):
  6. self.size=long(FileSize.Format(size))
  7. @staticmethod
  8. def Format(size):
  9. import re
  10. if isinstance(size,int) or isinstance(size,long):
  11. return size
  12. else:
  13. if not isinstance(size,str):
  14. return 0
  15. else:
  16. oSize=size.lstrip().upper().replace(" ","")
  17. pattern=re.compile(r"(\d*\.?(?=\d)\d*)(byte|kb|mb|gb|tb)",re.I)
  18. match=pattern.match(oSize)
  19. if match:
  20. m_size, m_unit=match.groups()
  21. if m_size.find(".")==-1:
  22. m_size=long(m_size)
  23. else:
  24. m_size=float(m_size)
  25. if m_unit!="BYTE":
  26. return m_size*FileSize.SIZE_UNIT[m_unit]
  27. else:
  28. return m_size
  29. else:
  30. return 0
  31. #返回字节为单位的值
  32. @property
  33. def size(self):
  34. return self.size
  35. @size.setter
  36. def size(self,newsize):
  37. try:
  38. self.size=long(newsize)
  39. except:
  40. self.size=0
  41. #返回带单位的自动值
  42. @property
  43. def FriendValue(self):
  44. if self.size<FileSize.SIZE_UNIT["KB"]:
  45. unit="Byte"
  46. elif self.size<FileSize.SIZE_UNIT["MB"]:
  47. unit="KB"
  48. elif self.size<FileSize.SIZE_UNIT["GB"]:
  49. unit="MB"
  50. elif self.size<FileSize.SIZE_UNIT["TB"]:
  51. unit="GB"
  52. else:
  53. unit="TB"
  54. if (self.size % FileSize.SIZE_UNIT[unit])==0:
  55. return "%s%s" % ((self.size / FileSize.SIZE_UNIT[unit]),unit)
  56. else:
  57. return "%0.2f%s" % (round(float(self.size) /float(FileSize.SIZE_UNIT[unit]) ,2),unit)
  58. def __str__(self):
  59. return self.FriendValue
  60. #相加
  61. def __add__(self, other):
  62. if isinstance(other,FileSize):
  63. return FileSize(other.size+self.size)
  64. else:
  65. return FileSize(FileSize(other).size+self.size)
  66. def __sub__(self, other):
  67. if isinstance(other,FileSize):
  68. return FileSize(self.size-other.size)
  69. else:
  70. return FileSize(self.size-FileSize(other).size)
  71. def __gt__(self, other):
  72. if isinstance(other,FileSize):
  73. if self.size>other.size:
  74. return True
  75. else:
  76. return False
  77. else:
  78. if self.size>FileSize(other).size:
  79. return True
  80. else:
  81. return False
  82. def __lt__(self, other):
  83. if isinstance(other,FileSize):
  84. if other.size>self.size:
  85. return True
  86. else:
  87. return False
  88. else:
  89. if FileSize(other).size > self.size:
  90. return True
  91. else:
  92. return False
  93. def __ge__(self, other):
  94. if isinstance(other,FileSize):
  95. if self.size>=other.size:
  96. return True
  97. else:
  98. return False
  99. else:
  100. if self.size>=FileSize(other).size:
  101. return True
  102. else:
  103. return False
  104. def __le__(self, other):
  105. if isinstance(other,FileSize):
  106. if other.size>=self.size:
  107. return True
  108. else:
  109. return False
  110. else:
  111. if FileSize(other).size >= self.size:
  112. return True
  113. else:
  114. return False