Files
rengine/tools/dirsearch/lib/utils/FileUtils.py
T
2020-07-11 00:41:38 +05:30

147 lines
3.7 KiB
Python
Executable File

# -*- coding: utf-8 -*-
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
# Author: Mauro Soria
import os
import os.path
class File(object):
def __init__(self, *pathComponents):
self._path = FileUtils.buildPath(*pathComponents)
self.content = None
@property
def path(self):
return self._path
@path.setter
def path(self, value):
raise NotImplemented
def isValid(self):
return FileUtils.isFile(self.path)
def exists(self):
return FileUtils.exists(self.path)
def canRead(self):
return FileUtils.canRead(self.path)
def canWrite(self):
return FileUtils.canWrite(self.path)
def read(self):
return FileUtils.read(self.path)
def update(self):
self.content = self.read()
def content(self):
if not self.content:
self.content = FileUtils.read()
return self.content()
def getLines(self):
for line in FileUtils.getLines(self.path):
yield line
def __cmp__(self, other):
if not isinstance(other, File):
raise NotImplemented
return cmp(self.content(), other.content())
def __enter__(self):
return self
def __exit__(self, type, value, tb):
pass
class FileUtils(object):
@staticmethod
def buildPath(*pathComponents):
if pathComponents:
path = os.path.join(*pathComponents)
else:
path = ""
return path
@staticmethod
def exists(fileName):
return os.access(fileName, os.F_OK)
@staticmethod
def canRead(fileName):
if not os.access(fileName, os.R_OK):
return False
try:
with open(fileName):
pass
except IOError:
return False
return True
@staticmethod
def canWrite(fileName):
return os.access(fileName, os.W_OK)
@staticmethod
def read(fileName):
result = ""
with open(fileName, "r") as fd:
for line in fd.readlines():
result += line
return result
@staticmethod
def getLines(fileName):
with open(fileName, "r", errors="replace") as fd:
return fd.read().splitlines()
@staticmethod
def isDir(fileName):
return os.path.isdir(fileName)
@staticmethod
def isFile(fileName):
return os.path.isfile(fileName)
@staticmethod
def createDirectory(directory):
if not FileUtils.exists(directory):
os.makedirs(directory)
@staticmethod
def sizeHuman(num):
base = 1024
for x in ["B ", "KB", "MB", "GB"]:
if num < base and num > -base:
return "%3.0f%s" % (num, x)
num /= base
return "%3.0f %s" % (num, "TB")
@staticmethod
def writeLines(fileName, lines):
content = None
if type(lines) is list:
content = "\n".join(lines)
else:
content = lines
with open(fileName, "w") as f:
f.writelines(content)