fix
This commit is contained in:
84
python_core/utils/PathUtils.py
Normal file
84
python_core/utils/PathUtils.py
Normal file
@@ -0,0 +1,84 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
from typing import List
|
||||
|
||||
|
||||
class FileUtils:
|
||||
@staticmethod
|
||||
def file_path_extend(media_path: str, extend: str) -> str:
|
||||
"""
|
||||
基于现有文件路径添加后缀, 例如 extend = "def" : 123/abc.txt -> 123/abc_def.txt
|
||||
:param media_path: 现有文件路径
|
||||
:param extend: 后缀名
|
||||
|
||||
:return: 处理过的新文件路径
|
||||
"""
|
||||
media_filename = os.path.basename(media_path)
|
||||
media_dir = os.path.dirname(media_path) + '/'
|
||||
filenames = media_filename.split('.')
|
||||
filenames[0] = f"{filenames[0]}_{extend}"
|
||||
extend_filename = '.'.join(filenames)
|
||||
return os.path.join(media_dir, extend_filename)
|
||||
|
||||
@staticmethod
|
||||
def replace_root_by_depth(media_path: str, root: str, depth: int = 1) -> str:
|
||||
"""
|
||||
使用根目录名替换路径起始位置, 例如:
|
||||
|
||||
prefix="pre",depth=0 : ./abc/def.txt -> pre\\.\\abc\\def.txt
|
||||
|
||||
prefix="pre",depth=1 : ./abc/def.txt -> pre\\abc\\def.txt
|
||||
|
||||
prefix="pre",depth=2 : ./abc/def.txt -> pre\\def.txt
|
||||
|
||||
prefix="pre",depth=3 : IndexError("Depth is out of range")
|
||||
|
||||
:param media_path: 现有文件路径
|
||||
:param root: 替换用的根目录名
|
||||
:param depth: root所占的路径深度层级
|
||||
|
||||
:return: 处理后的文件路径
|
||||
:exception IndexError: 根目录深度超过实际路径深度
|
||||
"""
|
||||
media_dirs = media_path.split('/')
|
||||
if depth >= len(media_dirs):
|
||||
raise IndexError("Depth is out of range")
|
||||
media_dir_prefix = os.path.join(root, *media_dirs[depth:])
|
||||
return media_dir_prefix
|
||||
|
||||
@staticmethod
|
||||
def file_path_change_extension(media_path: str, extension: str) -> str:
|
||||
media_filename = os.path.basename(media_path)
|
||||
media_dir = os.path.dirname(media_path) + "/"
|
||||
filenames = media_filename.split(".")
|
||||
filenames[-1] = extension
|
||||
filename = ".".join(filenames)
|
||||
return os.path.join(media_dir, filename)
|
||||
|
||||
@staticmethod
|
||||
def get_folder_size(folder_path: str) -> int:
|
||||
"""
|
||||
|
||||
Args:
|
||||
folder_path:
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
total_size = 0
|
||||
for path in Path(folder_path).rglob('*'):
|
||||
if path.is_file():
|
||||
total_size += path.stat().st_size
|
||||
return total_size
|
||||
|
||||
@staticmethod
|
||||
def get_file_size(file_path: str) -> int:
|
||||
return os.path.getsize(file_path)
|
||||
|
||||
@staticmethod
|
||||
def get_files_size(files: List[str]) -> int:
|
||||
total_size = 0
|
||||
for file in files:
|
||||
total_size += os.path.getsize(file)
|
||||
return total_size
|
||||
|
||||
Reference in New Issue
Block a user