184 lines
6.1 KiB
Python
184 lines
6.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
#########################################################
|
|
import codecs
|
|
import io
|
|
import json
|
|
import os
|
|
import re
|
|
import traceback
|
|
|
|
from . import logger
|
|
|
|
|
|
class ToolBaseFile(object):
|
|
|
|
|
|
|
|
@classmethod
|
|
def write(cls, data, filepath, mode='w'):
|
|
try:
|
|
import codecs
|
|
ofp = codecs.open(filepath, mode, encoding='utf8')
|
|
if isinstance(data, bytes) and mode == 'w':
|
|
data = data.decode('utf-8')
|
|
ofp.write(data)
|
|
ofp.close()
|
|
return True
|
|
except Exception as exception:
|
|
logger.debug('Exception:%s', exception)
|
|
logger.debug(traceback.format_exc())
|
|
return False
|
|
|
|
|
|
|
|
@classmethod
|
|
def size(cls, start_path = '.'):
|
|
total_size = 0
|
|
for dirpath, dirnames, filenames in os.walk(start_path):
|
|
for f in filenames:
|
|
fp = os.path.join(dirpath, f)
|
|
if not os.path.islink(fp):
|
|
total_size += os.path.getsize(fp)
|
|
return total_size
|
|
|
|
@classmethod
|
|
def file_move(cls, source_path, target_dir, target_filename):
|
|
try:
|
|
import shutil
|
|
import time
|
|
if os.path.exists(target_dir) == False:
|
|
os.makedirs(target_dir)
|
|
target_path = os.path.join(target_dir, target_filename)
|
|
if source_path != target_path:
|
|
if os.path.exists(target_path):
|
|
tmp = os.path.splitext(target_filename)
|
|
new_target_filename = f"{tmp[0]} {str(time.time()).split('.')[0]}{tmp[1]}"
|
|
target_path = os.path.join(target_dir, new_target_filename)
|
|
shutil.move(source_path, target_path)
|
|
except Exception as exception:
|
|
logger.debug('Exception:%s', exception)
|
|
logger.debug(traceback.format_exc())
|
|
|
|
|
|
@classmethod
|
|
def makezip(cls, zip_path, zip_folder=None, zip_extension='zip', remove_folder=False):
|
|
import zipfile
|
|
try:
|
|
zip_path = zip_path.rstrip('/')
|
|
if zip_folder is None:
|
|
zip_folder = os.path.dirname(zip_path)
|
|
elif zip_folder == 'tmp':
|
|
from framework import path_data
|
|
zip_folder = os.path.join(path_data, 'tmp')
|
|
if os.path.isdir(zip_path):
|
|
zipfilepath = os.path.join(zip_folder, f"{os.path.basename(zip_path)}.{zip_extension}")
|
|
fantasy_zip = zipfile.ZipFile(zipfilepath, 'w')
|
|
for f in os.listdir(zip_path):
|
|
src = os.path.join(zip_path, f)
|
|
fantasy_zip.write(src, os.path.basename(src), compress_type = zipfile.ZIP_DEFLATED)
|
|
fantasy_zip.close()
|
|
if remove_folder:
|
|
import shutil
|
|
shutil.rmtree(zip_path)
|
|
return zipfilepath
|
|
except Exception as exception:
|
|
logger.error('Exception:%s', exception)
|
|
logger.error(traceback.format_exc())
|
|
return
|
|
|
|
@classmethod
|
|
def rmtree(cls, folderpath):
|
|
import shutil
|
|
try:
|
|
shutil.rmtree(folderpath)
|
|
return True
|
|
except:
|
|
try:
|
|
os.system("rm -rf '{folderpath}'")
|
|
return True
|
|
except:
|
|
return False
|
|
|
|
|
|
@classmethod
|
|
def rmtree2(cls, folderpath):
|
|
import shutil
|
|
try:
|
|
for root, dirs, files in os.walk(folderpath):
|
|
for name in files:
|
|
os.remove(os.path.join(root, name))
|
|
for name in dirs:
|
|
shutil.rmtree(os.path.join(root, name))
|
|
except:
|
|
return False
|
|
|
|
|
|
@classmethod
|
|
def write_json(cls, filepath, data):
|
|
try:
|
|
if os.path.exists(os.path.dirname(filepath)) == False:
|
|
os.makedirs(os.path.dirname(filepath))
|
|
with open(filepath, "w", encoding='utf8') as json_file:
|
|
json.dump(data, json_file, indent=4, ensure_ascii=False)
|
|
except Exception as exception:
|
|
logger.error('Exception:%s', exception)
|
|
logger.error(traceback.format_exc())
|
|
|
|
@classmethod
|
|
def read_json(cls, filepath):
|
|
try:
|
|
with open(filepath, "r", encoding='utf8') as json_file:
|
|
data = json.load(json_file)
|
|
return data
|
|
except Exception as exception:
|
|
logger.error('Exception:%s', exception)
|
|
logger.error(traceback.format_exc())
|
|
|
|
|
|
@classmethod
|
|
def write_file(cls, filename, data):
|
|
try:
|
|
import codecs
|
|
ofp = codecs.open(filename, 'w', encoding='utf8')
|
|
ofp.write(data)
|
|
ofp.close()
|
|
except Exception as exception:
|
|
logger.error('Exception:%s', exception)
|
|
logger.error(traceback.format_exc())
|
|
|
|
@classmethod
|
|
def read_file(cls, filename):
|
|
try:
|
|
ifp = codecs.open(filename, 'r', encoding='utf8')
|
|
data = ifp.read()
|
|
ifp.close()
|
|
return data
|
|
except Exception as exception:
|
|
logger.error('Exception:%s', exception)
|
|
logger.error(traceback.format_exc())
|
|
|
|
|
|
|
|
@classmethod
|
|
def makezip_simple(cls, zip_path, zip_extension='cbz', remove_zip_path=True):
|
|
import shutil
|
|
import zipfile
|
|
try:
|
|
if os.path.exists(zip_path) == False:
|
|
return False
|
|
zipfilepath = os.path.join(os.path.dirname(zip_path), f"{os.path.basename(zip_path)}.{zip_extension}")
|
|
if os.path.exists(zipfilepath):
|
|
return True
|
|
zip = zipfile.ZipFile(zipfilepath, 'w')
|
|
for f in os.listdir(zip_path):
|
|
src = os.path.join(zip_path, f)
|
|
zip.write(src, f, compress_type = zipfile.ZIP_DEFLATED)
|
|
zip.close()
|
|
if remove_zip_path:
|
|
shutil.rmtree(zip_path)
|
|
return zipfilepath
|
|
except Exception as e:
|
|
logger.error(f'Exception:{str(e)}')
|
|
logger.error(traceback.format_exc())
|
|
return None
|
|
|