import aiofiles.os import aiofiles import os import inspect async def read_file(path: str, callback=None): if not await aiofiles.os.path.exists(path): return None async with aiofiles.open(path, "r") as f: if callback: result = callback(f) if inspect.isawaitable(result): return await result return result return await f.read() async def save_file(path: str, data, callback=None, *args, **kwargs): dir_path = os.path.dirname(path) if dir_path: await aiofiles.os.makedirs(dir_path, exist_ok=True) async with aiofiles.open(path, "w") as f: if callback: result = callback(data, f, *args, **kwargs) if inspect.isawaitable(result): await result else: await f.write(data)