How to extract UV manually from this script without Blender?

I have managed to convert the Rumble Rose YOBJ script to make it work for Wrestle Kingdom 2 model.However I want to code an application to support it without Blender.Right now I can extract the vertices,face datas without Blender.However the script stored the UV in a list that each element contains 3 2D-coordinates,which I don’t know how to handle that without Blender.However when print out the f variable in vertexuv function I get this:


# f = mesh.faces[m]
        # f.uv = [v.uvco for v in f.verts]
        # f.mat = uvlist[m][3]
        
        # f     :  MFace (124 121 131)        
        # f.verts : Verts[124], verts[121], verts[131]
        # f.uvs :  [0.104508, 0.640587] [0.068599, 0.655649], [0.104508, 0.622436]
        

My understanding is that each face indices are mapped with approriate UVs coord.So based on the text I found I made my script to do this:
vt 0.104508 0.640587
vt 0.068599 0.655649
vt 0.104508 0.622436
f 124/1 121/2 131/3

That however did not work so I guess I am wrong.How can I export the uv if I have the facelists and the uvlists without Blender from this script?Any help will be appreciated.


#2011-11-06 Glogow Poland Mariusz Szkaradek
#2016-01-02 eatrawmeat391
#Wrestle Kingdom 2 (PS2) yobj importer,edit from Rumble Rose script
#press alt+p and select folder with yobj files (example: '...\1200.pac')
#IMPORT:
#-geometry with uv split per material
#-bones
import bpy,struct,os
import Blender
from Blender import *
from struct import *
import math
from math import *
from Blender.Mathutils import *


def create_object_name():
    global model_id
    ids = []
    scene = bpy.data.scenes.active
    for mat in Material.Get():
        #print mat.name
        try:
            model_id = int(mat.name.split('-')[0])
            ids.append(model_id)
        except:pass
    try:
        model_id = max(ids)+1
    except:
        model_id = 0

def find_0():
    s=''
    while(True):
        litera =  struct.unpack('c',plik.read(1))[0]
        if  litera=='\x00':
            break
        else:
            s+=litera
    return s


def word(long):
   s=''
   for j in range(0,long):
       lit =  struct.unpack('c',plik.read(1))[0]
       if ord(lit)!=0:
           s+=lit
           if len(s)>100000:
               break
   return s

def b(n):
    return struct.unpack(n*'b', plik.read(n))
def B(n):
    return struct.unpack(n*'B', plik.read(n))
def h(n):
    return struct.unpack(n*'h', plik.read(n*2))
def H(n):
    return struct.unpack(n*'H', plik.read(n*2))
def i(n):
    return struct.unpack(n*'i', plik.read(n*4))
def f(n):
    return struct.unpack(n*'f', plik.read(n*4))


def vertexuv():
    for m in range(nMat):
    #for m in range(nParts):
        mesh.materials+=[Material.New()]
    mesh.vertexUV = 1
    mesh.faceUV = 1
    for m in range(len(faceslist)):
        for n in range(3):
            uv_data = uvlist[m][n]
            v_id = faceslist[m][n]
            
            mesh.verts[v_id].uvco = Vector(uv_data)
        f = mesh.faces[m]
        f.uv = [v.uvco for v in f.verts]
        f.mat = uvlist[m][3]
    mesh.update()   

def drawmesh(name):
    global obj,mesh,scene
    mesh = bpy.data.meshes.new(name)
    mesh.verts.extend(vertexlist)
    mesh.faces.extend(faceslist,ignoreDups=True,smooth =1)
    scene = bpy.data.scenes.active
    obj = scene.objects.new(mesh,name)
    mesh.recalcNormals()
    mesh.update()
    Redraw()



def check_armature():
    global armobj,newarm
    armobj=None
    newarm=None
    scn = Scene.GetCurrent()
    scene = bpy.data.scenes.active
    for object in scene.objects:
        if object.getType()=='Armature':
            if object.name == 'armature':
                scene.objects.unlink(object)
    for object in bpy.data.objects:
        if object.name == 'armature':
            armobj = Blender.Object.Get('armature')
            newarm = armobj.getData()
            newarm.makeEditable()   
            for bone in newarm.bones.values():
                del newarm.bones[bone.name]
            newarm.update()
    if armobj==None:
        armobj = Blender.Object.New('Armature','armature')
    if newarm==None:
        newarm = Armature.New('armature')
        armobj.link(newarm)
    scn.link(armobj)
    newarm.drawType = Armature.STICK
    armobj.drawMode = Blender.Object.DrawModes.XRAY

def make_bone():
    newarm.makeEditable()
    for bone_id in range(len(bones)):
        bonedata = bones[bone_id]
        #bonename = str(bonedata[1][0])
        bonename = bonedata[0]
        eb = Armature.Editbone()
        newarm.bones[bonename] = eb
    newarm.update()

def make_bone_parent():
    newarm.makeEditable()
    for bone_id in range(len(bones)):
        bonedata = bones[bone_id]
        parent_id = bonedata[1]
        bonename = bonedata[0]
        if parent_id!=-1:
            bone = newarm.bones[bonename] 
            #boneparent = newarm.bones[str(parent_id)]
            boneparent = newarm.bones[bones[parent_id][0]]
            bone.parent = boneparent
    newarm.update()

def make_bone_position():
    newarm.makeEditable()
    for bone_id in range(len(bones)):
        bonedata = bones[bone_id]
        #bonename = str(bonedata[1][0])
        bonename = bonedata[0]
        pos = bonedata[2]
        rot = bonedata[3]
        rot = Euler(rot).toMatrix()
        bone = newarm.bones[bonename]
        if bone.parent:
           bone.head =   bone.parent.head+Vector(pos) * bone.parent.matrix
           tempM = rot*bone.parent.matrix
           bone.matrix = tempM
        else:
            bone.head = Vector(pos)
            bone.matrix = rot
        bvec = bone.tail- bone.head
        bvec.normalize()
        bone.tail = bone.head + 0.01 * bvec
    newarm.update()

def skeleton():
    check_armature()
    make_bone()
    make_bone_parent()
    make_bone_position()

def parser():
    global bones,vertexlist,faceslist,uvlist,nMat,nParts
    print word(4)
    offs = i(18);print offs
   
    bones = []

    plik.seek(offs[9]+8)
    for a in range(offs[6]):
        BoneName = word(16);print BoneName
        tx = f(1)[0]
        ty = f(1)[0]
        tz = f(1)[0]
        tw = f(1)[0]
        rx = (f(1)[0] * 180) / pi
        ry = (f(1)[0] * 180) / pi
        rz = (f(1)[0] * 180) / pi
        rw = f(1)[0]
        parent = i(1)[0]
        plik.seek(0xC,1)#seek_cur
        qx = f(1)[0]
        qy = f(1)[0]
        qz = f(1)[0]
        qw = f(1)[0]
        bones.append([BoneName,parent,[tx,ty,tz],[rx,ry,rz]])
        #tfm = (eulerangles rx ry rz) as matrix3
        #append tarr [tx,ty,tz]
        #append rarr tfm
        #append qarr [qx,qy,qz,qw]
        #append Barr BoneName
        #append Parr parent
    skeleton()


    plik.seek(offs[8])
    print plik.tell()
    meshdata = []
    for m in range(offs[5]):
        back = plik.tell()
        data = i(13);print m,data
        pos = f(3)
        meshdata.append([data,pos])
        plik.seek(back+64)
        #break

    for m in range(offs[5]):
    #for m in range(5):
        print 'object-',m
        vertexlist = []
        faceslist = []
        uvlist = []
        data = meshdata[m][0]
        plik.seek(data[8]+40)
        back = plik.tell()
        for n in range(data[12]):
            vertexlist.append(f(3))
            i(1)[0]
 
        print plik.tell()
        print i(4)     
        for n in range(data[12]):
            f(4)

        print plik.tell()
        print i(4)     
        for n in range(data[11]):#weights
            print n,f(4)

        print plik.tell()
        plik.seek(data[5]+8)
        print plik.tell()
        face_data = []
        for n in range(data[3]):
            f(8)
            i(40)
            var = i(4)#;print var
            face_data.append(var)
            #print plik.tell()
        nMat = data[3]
        for n in range(data[3]):#nMat
            #faceslist = []
            #uvlist = []
            plik.seek(face_data[n][2]+8)           
            for k in range(face_data[n][1]):
                k,i(4)     
                #back = plik.tell()     
            plik.seek(face_data[n][3]+8)
            nParts = face_data[n][1]
            for k in range(face_data[n][1]):#nParts
                #print m,plik.tell()
                var = B(32)#;print var 
                v1 = -1
                v2 = -1
                uv1 = -1
                uv2 = -1
                direct = -1
                for l in range(var[16]):#nFaces
                    direct*=-1
                    #mesh.verts[m].uvco = Vector(uvlist[m])
                    uv3 = [f(1)[0],1-f(1)[0]] 
                    l,
                    v3 = i(1)[0] 
                    f(1)
                    #print v1,v2,v3
                    if v1!=-1 and v2!=-1:
                        if direct>0:
                            faceslist.append([v1,v2,v3])
                            uvlist.append([uv1,uv2,uv3,n])
                            #uvlist.append([uv1,uv2,uv3,k])
                        else:
                            faceslist.append([v1,v3,v2])
                            uvlist.append([uv1,uv3,uv2,n])
                            #uvlist.append([uv1,uv3,uv2,k])
                    v1=v2
                    uv1=uv2
                    v2=v3
                    uv2=uv3
        drawmesh('model-'+str(m))
        vertexuv()
        Blender.Redraw()
    print plik.tell()
       



def importer(filename):
    global plik,dirname,basename,skala,nbBones
    basename = sys.basename(filename)
    print basename
    dirname = sys.dirname(filename)
    for file in os.listdir(dirname):
        if file.split('.')[-1].lower()=='yobj':
            plik = open(dirname+os.sep+file,'rb')
            create_object_name()
            parser()
            Redraw()
            plik.close()

Window.FileSelector (importer)


PS: The forums made me confirmed that I was not a robot when previewing the post.After previewing the post all of the texts were gone and this was very annoying.