From 4d8c96cfae1cdf9b49b2b3bfe56fdbdc989296c4 Mon Sep 17 00:00:00 2001 From: Daniel Weschke Date: Wed, 6 Feb 2019 13:19:05 +0100 Subject: [PATCH] redefine complex defs in simple defs and rename defs and variables --- materials.py | 115 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 72 insertions(+), 43 deletions(-) diff --git a/materials.py b/materials.py index c40c483..200df80 100755 --- a/materials.py +++ b/materials.py @@ -20,28 +20,60 @@ VERSION = """\ EPILOG = """\ """ -def list_files(): + +def read_dir(dir, exclude=[]): """\ - List all materials + Read all files in directory as list """ from os import listdir - for data in listdir("./data"): + result = [] + for data in listdir(dir): file_name = data.split('.')[0] - if file_name != "INFO": - print(file_name) + if file_name not in exclude: + result.append(file_name) + return result -def read(input_file, search_keys=None): + +def print_list(list): """\ - Read json file + Print list """ - import os - import json + for data in list: + print(data.title()) + + +def read_file(input_file): + """\ + Read file as string + """ + try: + with open(input_file) as data_file: + return data_file.read() + except (OSError, IOError) as err: + print(str(err)) + sys.exit(2) + + +def print_data(data): + """\ + Convert string data to json data and print it. + """ + from json import loads from pprint import pprint + #print(data) + pprint(loads(data)) + + +def search_keys(data, keys=None): + """\ + Search for json keys in string data + """ + from json import loads + def find_values(key, json_repr): results = [] - def _decode_dict(a_dict): try: results.append(a_dict[key]) @@ -49,42 +81,31 @@ def read(input_file, search_keys=None): pass return a_dict - json.loads(json_repr, object_hook=_decode_dict) # return value ignored + loads(json_repr, object_hook=_decode_dict) # return value ignored return results - try: - with open(os.path.join('data', input_file + '.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]) + if keys is not None: + for key in keys: + found_values = find_values(key, data) + #print(found_values) + for value in found_values: + print(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 getLength(element): + # try: + # element.__iter__ + # return sum([getLength(i) for i in element]) + # except: + # return 1 + #print(len(data)) + #print(getLength(json.loads(data))) def main(): """\ Main function """ + from os import path import argparse parser = argparse.ArgumentParser( @@ -104,8 +125,9 @@ def main(): help='list all available materials') # material - parser_material = subparsers.add_parser('material', - help='the material to get information from') + parser_material = subparsers.add_parser('get', + description='Get material information.', + help='get material information') parser_material.add_argument('materialname', action='store', help='list available material information') parser_material.add_argument('-r', '--rho', dest='const_collection', @@ -121,16 +143,23 @@ def main(): print(args) if args.command == 'list': - list_files() + list = read_dir("./data", "INFO") + print_list(list) - elif args.command == 'material': + elif args.command == 'get': + filename = path.join('data', args.materialname + '.json') + if args.debug: + print("filename: " + filename) if args.const_collection: - read(args.materialname, search_keys=args.const_collection) + data = read_file(filename) + search_keys(data, keys=args.const_collection) else: - read(args.materialname) + data = read_file(filename) + print_data(data) return 0 + if __name__ == "__main__": import sys sys.exit(main())