游戏包体资源资产信息 - 详细分析
游戏包体资源资产信息/n/nBP_AIChar_110020100_CPNSoldier ---- 21.13 MB/n /Game/AIBehavior/CPN/110020100_CPNSoldier/ ---- 21.13 MB /n E ---- /Game/Maps/C02_StormFortress/Quest/Sequence/M_Light_shinny /n E ---- /Game/Avatar/Base/Male_mesh_3P_Skeleton /n/nBP_AIChar_150012100_MUTRockBreaker ---- 12.37 MB/n /Game/AIBehavior/MUT/150012100_MUTRockBreaker/ ---- 12.37 MB /n E ---- /Game/Avatar/Base/Male_mesh_3P_Skeleton /n E ---- /Game/Maps/C02_StormFortress/Quest/Sequence/M_Light_shinny /n E ---- /Game/GenTexDir/Game/Environment/BL01_Wild/Props/Textures/T_VMGen_EmissiveMap_9d49d7eec28ca8720dde347518992234 /n/nAll Pak Count is 45/n/n## Django 模型/n/npython/nclass PackageAssetInfo(models.Model):/n '包体资源资产信息'/n id = models.BigAutoField(primary_key=True)/n id_test = models.IntegerField()/n type = models.CharField(max_length=45, blank=True, null=True)/n name = models.CharField(max_length=256, blank=True, null=True)/n size = models.BigIntegerField(blank=True, null=True)/n id_row = models.IntegerField(verbose_name='唯一节点id')/n parent_id = models.IntegerField(blank=True, null=True, verbose_name='上一级节点id_row')/n depth = models.IntegerField(blank=True, null=True, verbose_name='层级')/n leaf = models.BooleanField(default=False, verbose_name='是否是父节点')/n/n class Meta:/n db_table = 'package_asset_info'/n/n/n## 数据入库代码/n/npython/nimport re/nfrom django.db import transaction/nfrom myapp.models import PackageAssetInfo/n/ndef parse_size(size_str):/n '将文件大小字符串转换为字节数'/n units = {'KB': 1024, 'MB': 1024**2, 'GB': 1024**3}/n size, unit = re.match(r'^([/d.]+)/s*(/w+)$', size_str).groups()/n return int(float(size) * units[unit])/n/ndef save_package_asset_info(file_content):/n '将文件内容入库'/n with transaction.atomic():/n # 先清空表中数据/n PackageAssetInfo.objects.all().delete()/n # 逐行解析并入库/n for line in file_content.split('/n'):/n if not line.strip(): # 跳过空行/n continue/n depth = line.count(' ') // 4 # 根据缩进计算层级/n is_leaf = not line.endswith('/') # 判断是否是叶节点/n parts = line.split()/n size = parse_size(parts[1]) if len(parts) > 1 else None/n PackageAssetInfo.objects.create(/n id_test=0,/n type=parts[0] if is_leaf else 'dir',/n name=parts[-1],/n size=size,/n id_row=0,/n parent_id=None if depth == 0 else None, # 根节点没有父节点/n depth=depth,/n leaf=is_leaf,/n )/n/nsave_package_asset_info(file_content)/n/n
原文地址: https://www.cveoy.top/t/topic/nAzj 著作权归作者所有。请勿转载和采集!