view vgx_converter.py @ 17:96c070110fff draft default tip

Uploaded
author computationaltranscriptomics
date Sat, 04 Jun 2016 03:39:43 -0400
parents 567274fa974d
children
line wrap: on
line source

#!/usr/bin/python

import sys # 
import csv #
import json
import shlex

def __main__():

    arg_names = ['command', "network", "delimiter", "attributes", "output"]
    args = dict(zip(arg_names, sys.argv))
    print args

    idc = 0 # counter for the ids
    ids = {} # dictionary with id and name correlation
    keys = []

    nodes = []
    links = []

    delim = {}
    delim['tab'] = '\t'
    delim['space'] = ' '

    #################################################
    data = {}
    with open(sys.argv[1], 'r') as f:
        reader = csv.reader(f, delimiter=delim[sys.argv[2]])
        for row in reader: # iterate through each line
            p1 = shlex.split(row[0])[0]
            p2 = shlex.split(row[2])[0]

            if p1 not in ids:
                ids[p1] = idc
                idc = idc + 1
                nodes.append({'id': str(ids[p1]), 'label': p1 })
            if p2 not in ids:
                ids[p2] = idc
                idc = idc + 1
                nodes.append({'id': str(ids[p2]), 'label': p2 })
            
            links.append({'source': ids[p1], 'target': ids[p2]})
    f.close()

    data = { 'graph': {'nodes': nodes, 'edges': links}}
    
    if args['attributes'] != 'None': # None for Galaxy
        #data['some'] = 'not in here'

        # process attributes list 
        with open(sys.argv[3]) as f:
            reader = csv.reader(f, delimiter='\t')
            ids_keys = ids.keys()
            for row in reader:
                propscnt = 0
                if row[0] in ids_keys:
                    pos = ids[row[0]]
                    #for props in range(len(row)-1):
                    #    nodes[pos]['property'+str(propscnt)] = row[props+1]
                    #    propscnt = propscnt +1
                    metadata = {}
                    for props in range(len(row)-1):
                        metadata['property'+str(propscnt)] = row[props+1]
                        propscnt = propscnt +1
                    print metadata
                    nodes[pos]['metadata'] = metadata
        f.close()
    
    # write json data back to spec ified output file
    with open(sys.argv[4], 'w') as out:
        json.dump(data, out)
    out.close()
    
if __name__ == "__main__":
    __main__()