python - python基于emp_id比较两个类对象的实例面临困难
问题描述
我是 python 新手,我在比较从 csv 文件中获取的类对象的实例时遇到了问题。我将 person.csv 的数据分配给 Employee 类,将福利.csv 分配给福利类。现在,我需要比较这两个类的实例,即 (emp_id)。这是我的两个 csv 文件:person.csv:
emp_id sex age
1 Male 25
2 Female 26
3 Male 28
好处.csv:
emp_id code type
1 A1 1
1 B20 2
1 A10 1
2 B20 2
3 A10 1
3 C2 2
代码:
class Benefits():
def __init__(self,emp_id,code,codetype):
super().__init__()
self.emp_id = emp_id
self.code = code
self.codetype = codetype
class Employee():
def __init__(self,emp_id,sex,age):
super().__init__()
self.emp_id = emp_id
self.sex = sex
self.age = age
self.benefits = []
def __repr__(self): # specifies how to display an Employee
return "EMP NO:" + str(self.emp_id) + ",SEX:" + str(self.sex) + ",AGE:" + str(self.age) + ",Benefits:" + str(self.benefits)
def add_benefits(self,ben):
self.benefits.append(ben)
dir = os.path.dirname(__file__)
file1 = open(os.path.join(dir,"person.csv"), 'r')
next(file1)
directory = os.path.dirname(__file__)
file2 = open(os.path.join(directory, "benefits.csv"), 'r')
next(file2)
for line1 in file1:
vals1 = list(map(lambda s: s.strip(),line1.split(",")))
E = Employee(vals1[0],vals1[1],vals1[2])
for line2 in file2:
vals2 = list(map(lambda s: s.strip(),line2.split(",")))
B = Benefits(vals2[0],vals2[1],vals2[2])
if vals1[0] == vals2[0]: #this condition needs to check for all the emp_id's
E.add_benefits(Benefits(vals2[0],vals2[1],vals2[2]))
print(E)
但我只得到最后一个 emp_id 的输出,如下所示:
>>>print(E)
EMP NO:3,SEX:Male,AGE:28,Benefits:[A10,C2]
这应该是必需的输出:
EMP NO:1,SEX:Male,AGE:25,Benefits:[A1,B20,A10]
EMP NO:2,SEX:Female,AGE:26,Benefits:[B20]
EMP NO:3,SEX:Male,AGE:28,Benefits:[A10,C2]
谁能帮我解决这个问题。提前致谢。
解决方案
这似乎是麻烦点:
for line1 in file1:
vals1 = list(map(lambda s: s.strip(),line1.split(",")))
E = Employee(vals1[0],vals1[1],vals1[2])
我可以看到您正在尝试将所有 3 行添加到您的 vals1 列表中,然后打印它。仅显示 1 行的原因是因为您在每次迭代期间都重新定义了 vals1 和 E 变量。因此,您实际上不是将数据添加到列表中,而是在每次传递时都将其清除并重写。
如何修复它:
创建一个空列表来存储每次迭代时 E 的值,并在程序结束时打印该列表,或者在每次迭代结束时简单地打印 E。
推荐阅读
- docker - 无法连接到 Kubernetes - 配置无效
- javascript - 从 Reactjs 中的文件导出数据
- javascript - NATS 与分子。如何更改 NATS max_payload 值?
- reactjs - 从 GitHub 目录部署一个 react 应用程序到 netlify
- ansible - 如何在我的集合的根目录上运行 ansible-test?
- c - C中字符串从大写变为小写时堆溢出[leetcode]
- android - 无法从 Android 写入 Firebase 实时数据库
- scala - 我可以避免在这种情况下使用结构类型吗?
- python - 如何将自定义数据生成器输入到 tensorflow.keras 模型中,生成 X,y 和一个附加数组的 model.fit?
- django - 无法将主机名转换为“db”到地址:未知主机