【发布时间】:2017-03-03 08:53:33
【问题描述】:
对 Python 非常陌生,需要一些帮助。如何在课堂上引用成员? 我有两个 csv 文件。一个包含一系列零件和相关的材料 ID。另一个是包含材料 ID 和有关该材料的一些信息的材料索引。
我的目的是创建第三个文件,其中包含所有零件、它们的材料 ID 以及材料索引中存在的信息。
我为材料索引创建了一个类,并尝试使用零件文件中的材料 ID 访问此类中的对象,但是,这不起作用,我不确定为什么。任何帮助表示赞赏:
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)
【问题讨论】:
-
究竟是什么不起作用?请将您的代码减少到演示问题所需的最低限度。至少,在发布之前删除注释掉的行。
-
所以我相信我已经成功创建了这个类,但是在尝试从类中提取信息时出现错误: line:
material_name = materials[material_id].name我认为这是因为 material_id 来自零件列表文件并且类已经从材料索引生成。 -
什么错误?
-
很抱歉,这会有所帮助!关键错误:“材料 ID”。这是
semicolon_split[3]的第一个实例。我认为这个问题可能是由于试图比较一个字符串和一个整数,因为我刚刚意识到 material_id 是一个字符串,但 [int(comma_split[0]]) 显然必须是一个整数 -
没有。
materials是一个字典,它的键是整数,值是类实例。但是您看到的错误是在字典中查找元素,而不是在获得实例后访问实例中的信息。
标签: python class object keyerror