Search code examples
pythonclassobjectkeyerror

Python: Define Object within a Class


Very new to Python and could do with some help. How do I go about referencing members in a class? I have two csv files. One contains a series of parts and associated material ID. The other is a material index that contains materials ID's and some information about that material.

My intention is to create a third file that contains all of the parts, their material Id's and the information if present in the material index.

I have created a class for the material index and am trying to access objects in this class using material Ids from the part file however, this is not working and I am unsure as to why. Any help is appreciated:

class material():
    def __init__(self, name, ftu, e, nu):
        self.name = name
        self.ftu = ftu
        self.e = e
        self.nu = nu

def extract_FTU_Strain(input_file_parts,input_file_FTU,output_file):

    parts = {}
    materials = {}

    for aline in open(input_file_FTU, 'r'):
        comma_split = aline.strip().split(',')
        name = comma_split[1]
        ftu = comma_split[8]
        e = comma_split[9]
        nu = comma_split[7]



        try:
            materials[int(comma_split[0])] = material(comma_split[1],comma_split[8],comma_split[9],comma_split[7])
            #materials[comma_split[0]] = material(comma_split[1],comma_split[8],comma_split[9],comma_split[7])
        except:
            pass


    for i in open(input_file_parts, 'r'):
        semicolon_split = i.strip().split(';')


        material_id = semicolon_split[3]


        part = semicolon_split[0]
        part_id = semicolon_split[1]

        material_name = materials[material_id].name
        FTU = materials[material_id].ftu
        Stress = materials[material_id].e
        output.write(','.join([part,part_id,material_name,material_id,FTU,Stress]) + '\n') 












    output = open (output_file,'w')
    output.write('Part Title, Part Id, Material Id, FTU, e' + '\n')
    output.close()

import sys

input_file_parts = '/parttable.csv'
input_file_FTU = '/Material_Index.csv'
output_file = '/PYTHONTESTING123.csv'
extract_FTU_Strain(input_file_parts,input_file_FTU,output_file)

Solution

  • Since in the comments you said your error is in materials[material_id] make material_id an integer as it was an integer when you created the object.

    You created it this way

    materials[int(comma_split[0])]=...

    But later called it without converting material_id to an int. Do this before calling it in your for loop to write in the output.

    material_id = int(material_id)