# 感谢伟大的 Diving-Fish 让我被迫直面恐惧 import xml.dom.minidom as minidom from pathlib import Path import json from loguru import logger def makeMusicDBJson(): ''' 从 HDD 的文件来生成 music_db.json 推荐的是如果要国服用 那就用国际服的文件来生成 免得国服每次更新还要重新生成太麻烦 ''' # 记得改 A000_DIR = Path('H:\PRiSM\Package\Sinmai_Data\StreamingAssets\A000') OPTION_DIR = Path('H:\PRiSM\Package\Sinmai_Data\StreamingAssets') music_db: dict[str, dict[str, str | int]] = {} DEST_PATH = Path('../Data/musicDB.json') music_folders = [f for f in (A000_DIR / 'music').iterdir() if f.is_dir()] for option_dir in OPTION_DIR.iterdir(): if (option_dir / 'music').exists(): music_folders.extend([f for f in (option_dir / 'music').iterdir() if f.is_dir()]) for folder in music_folders: xml_path = (folder / 'Music.xml') if xml_path.exists(): xml = minidom.parse(xml_path.as_posix()) data = xml.getElementsByTagName('MusicData')[0] music_id = data.getElementsByTagName('name')[0].getElementsByTagName('id')[0].firstChild.data music_name = data.getElementsByTagName('name')[0].getElementsByTagName('str')[0].firstChild.data music_version = data.getElementsByTagName('AddVersion')[0].getElementsByTagName('id')[0].firstChild.data music_db[music_id] = { "name": music_name, "version": int(music_version) } logger.debug(f'Found {len(music_db)} music data') serialized = '{\n' sorted_keys = sorted(music_db.keys(), key=lambda x: int(x)) for key in sorted_keys: value = music_db[key] serialized += f' "{key}": {json.dumps(value, ensure_ascii=False)},\n' serialized = serialized[:-2] + '\n}' with open(DEST_PATH, 'w', encoding='utf-8') as f: f.write(serialized) if __name__ == '__main__': makeMusicDBJson() print('Done.')