#!/usr/bin/env python # -*- coding: utf8 -*- """ Parse skill tree names and jp names for monster hunter X. http://monsterhunter.wikia.com/wiki/MHX:_Skill_List Returns list of dict, e.g.: [ { "name": "Testucabra", "name_jp": "...", }, ... ] """ import sys import re import json from collections import defaultdict, OrderedDict import requests #

Ammo Saver

弾薬節約 TREE_RE = re.compile('^]*>(?:)?([^<]*)(?:)?([^<]*)') # Guard +1
ガード性能+1 # Cold Surge
寒さ倍加 # Charm Up New
護石系統倍加 SKILL_RE = re.compile( '(?:)?]*>)?)(?:<[^>]+>)*
(.*)') def parse_wikia_skill_trees(f): strees = [] skills = [] seen = set() in_tree = 0 is_new = False while True: line = f.readline() if not line: break line = line.strip() if in_tree: if not line: in_tree -= 1 continue m = SKILL_RE.match(line) if m: assert len(m.groups()) == 3 is_new = len(m.group(2)) > 0 stree = strees[-1] skill = dict(name=m.group(1).strip(), new=is_new, name_jp=m.group(3).strip(), tree=stree["name"], tree_jp=stree["name_jp"]) skills.append(skill) if is_new: stree["new"] = True else: stree["new"] = False # next line should be number of points next_line = f.readline() points = next_line[next_line.rfind('>')+1:].strip() skill["points"] = points continue m = TREE_RE.match(line) if m: stree = dict(name=m.group(1).strip(), name_jp=m.group(2).strip()) if stree["name"] not in seen: strees.append(stree) seen.add(stree["name"]) # three blank lines divides skill tree rows in_tree = 3 is_new = False return strees, skills def _main(): if len(sys.argv) != 4: print "Usage: %s infile out_strees.json out_skills.json" % sys.argv[0] sys.exit(1) with open(sys.argv[1]) as f: strees, skills = parse_wikia_skill_trees(f) with open(sys.argv[2], "w") as f: json.dump(strees, f, indent=2) f.write("\n") with open(sys.argv[3], "w") as f: json.dump(skills, f, indent=2) f.write("\n") if __name__ == '__main__': _main()