#!/usr/bin/env python # -*- coding: utf-8 -*- # -*- mode: python-mode; python-indent-offset: 2; tab-width: 2 -*- """ Created on Mon Dec 21 19:39:44 2015 @author: Daniel """ import sys, os import argparse def list(): from os import listdir for data in listdir("./data"): file_name = data.split('.')[0] if file_name != "INFO": print(file_name) def read(input, search_keys=None): import json from pprint import pprint def find_values(id, json_repr): results = [] def _decode_dict(a_dict): try: results.append(a_dict[id]) except KeyError: pass return a_dict json.loads(json_repr, object_hook=_decode_dict) # return value ignored return results try: with open(os.path.join('data', input + '.json')) as data_file: if search_keys is not None: data = data_file.read() for search_key in search_keys: found_values = find_values(search_key, data) #print(found_values) for value in found_values: #print('%-5s' % value[0] + ' ' + value[1]) print(search_key + ' = ' + '%s' % value[0] + ' ' + value[1]) #def getLength(element): # try: # element.__iter__ # return sum([getLength(i) for i in element]) # except: # return 1 #print(len(data)) #print(getLength(json.loads(data))) else: data = json.load(data_file) pprint(data) except (OSError, IOError) as err: print(str(err)) sys.exit(2) def main(): parser = argparse.ArgumentParser(description='Material database.') subparsers = parser.add_subparsers(help='commands', dest='command') # list materials list_parser = subparsers.add_parser('list', description='List materials.', help='list all available materials') # material material_parser = subparsers.add_parser('material', help='the material to get information from') material_parser.add_argument('materialname', action='store', help='list available material information') material_parser.add_argument('-r', '--rho', dest='const_collection', action='append_const', const="rho", help='get density from material') material_parser.add_argument('-T', '--Tm', dest='const_collection', action='append_const', const="Tm", help='get melting point temperature') parser.add_argument('-v', '--version', action='version', version='%(prog)s 1.0') args = parser.parse_args() print(args) if args.command == 'list': list() elif args.command == 'material': if args.const_collection: read(args.materialname, search_keys=args.const_collection) else: read(args.materialname) if __name__ == "__main__": main()