I have a number of chemicals with corresponding data held within a database, how do I go about returning a specific chemical, and its data, via its formula, eg o2.
class SourceNotDefinedException(Exception):
def __init__(self, message):super(SourceNotDefinedException, self).__init__(message)class tvorechoObject(object):
"""The class stores a pair of objects, "tv" objects, and "echo" objects. They are accessed
simply by doing .tv, or .echo. If it does not exist, it will fall back to the other variable.
If neither are present, it returns None."""
def __init__(self, echo=None, tv=None):self.tv = tvself.echo = echodef __repr__(self):return str({"echo": self.echo, "tv": self.tv}) # Returns the respective stringsdef __getattribute__(self, item):"""Altered __getattribute__() function to return the alternative of .echo / .tv if the requestedattribute is None."""if item in ["echo", "tv"]: if object.__getattribute__(self,"echo") is None: # Echo data not presentreturn object.__getattribute__(self,"tv") # Select TV dataelif object.__getattribute__(self,"tv") is None: # TV data not presentreturn object.__getattribute__(self,"echo") # Select Echo dataelse:return object.__getattribute__(self,item) # Return all dataelse:return object.__getattribute__(self,item) # Return all dataclass Chemical(object):def __init__(self, inputLine, sourceType=None):self.chemicalName = TVorEchoObject() self.mass = TVorEchoObject()self.charge = TVorEchoObject()self.readIn(inputLine, sourceType=sourceType)def readIn(self, inputLine, sourceType=None):if sourceType.lower() == "echo": # Parsed chemical line for Echo format chemicalName = inputLine.split(":")[0].strip()mass = inputLine.split(":")[1].split(";")[0].strip()charge = inputLine.split(";")[1].split("]")[0].strip()# Store the objectsself.chemicalName.echo = chemicalNameself.mass.echo = massself.charge.echo = chargeelif sourceType.lower() == "tv": # Parsed chemical line for TV formatchemicalName = inputLine.split(":")[0].strip()charge = inputLine.split(":")[1].split(";")[0].strip()mass = inputLine.split(";")[1].split("&")[0].strip()# Store the objectsself.chemicalName.tv = chemicalNameself.charge.tv = chargeself.mass.tv = molecularWeightelse:raise SourceNotDefinedException(sourceType + " is not a valid `sourceType`") # Otherwise print def toDict(self, priority="echo"):"""Returns a dictionary of all the variables, in the form {"mass":<>, "charge":<>, ...}.Design used is to be passed into the Echo and TV style line format statements."""if priority in ["echo", "tv"]:# Creating the dictionary by a large, to avoid repeated textreturn dict([(attributeName, self.__getattribute__(attributeName).__getattribute__(priority))for attributeName in ["chemicalName", "mass", "charge"]])else:raise SourceNotDefinedException("{0} source type not recognised.".format(priority)) # Otherwise printfrom ParseClasses import Chemical
allChemical = []
chemicalFiles = ("/home/temp.txt")for fileName in chemicalFiles:with open(fileName) as sourceFile:for line in sourceFile:allChemical.append(Chemical(line, sourceType=sourceType))for chemical in allChemical:print chemical.chemicalName #Prints all chemicals and their data in list formatfor chemical in allChemical(["o2"]):print chemical.chemicalName
outputs the following error which I have tried to remedy with no luck; TypeError: 'list' object is not callable