Python小例子-怎样按列关联两个txt文件?
问题定义
故事是这样的,我有两个txt文件,第一个是课程-学生成绩文件,第二个是课程和老师的对应关系,我想把课程的老师名字加到学生成绩文件,该怎么做呢?
如下是两个文件的截图:
第一个文件是【课程-学生-成绩】数据文件
文件名是course_student_grade_input.txt
它有这些数据列:课程名称、学生学号、学生姓名、学生成绩
第二文件是【课程-老师】-关系数据文件
文件名是course_teacher.txt
它有这些数据列:课程名称、老师姓名。
怎么实现把老师名称加到成绩文件作为一列呢?
实现思路
其实这个问题,非常类似SQL语句的 table_a join table_b on (teacher),在MySQL数据库的实现中join语句是通过对第一个表的每行数据,依次去查找第二个表的对应关联值来实现的,类似第二个表加载到内存,对第一个表的每一行依次查询第二个表。
而如果用Python实现的话,会借助字典实现,一般是如下图的思路:
简而言之,包含3个大步骤:
【课程-老师-关系表】,存入Python的字典;
按行遍历【老师-学生-成绩表】,对每个老师姓名,从第1步骤的字典中查询老师姓名
将结果写出到文件中
代码实现
代码:将【课程-老师】信息表,读取到一个字典中。
course_teacher_map = {}
with open("./datas/course_teacher.txt") as fin:
for line in fin:
line = line[:-1]
course, teacher = line.split(",")
course_teacher_map[course] = teacher
如果打印这个字典,会看到这样的数据:
{'语文': '于老师', '数学': '树老师', '英语': '影老师'}
代码:遍历【课程-学生-成绩表】实现老师信息的查找并输出
with open("./course_student_grade_input.txt") as fin:
for line in fin:
line = line[:-1]
course, sno, sname, sgrade = line.split(",")
# 这一步骤,实现了老师信息的查找
teacher = course_teacher_map.get(course)
print(course, teacher, sno, sname, sgrade)
最终打印的合并后的数据如下所示:
语文 于老师 101 小张 94
语文 于老师 102 小王 64
语文 于老师 103 小李 62
语文 于老师 104 小赵 55
语文 于老师 105 小强 91
数学 树老师 101 小张 53
数学 树老师 102 小王 82
数学 树老师 103 小李 86
数学 树老师 104 小赵 93
数学 树老师 105 小强 72
英语 影老师 101 小张 92
英语 影老师 102 小王 80
英语 影老师 103 小李 73
英语 影老师 104 小赵 93
英语 影老师 105 小强 51
我们就是实现了两个文件的按KEY=课程名称的关联,方案就是先将一个文件存入字典,然后另一个文件的每一行都根据关联KEY去查找VALUE。
视频讲解
谢谢大家的关注,我是蚂蚁。
点击下方“阅读原文”,跳转到【Python小例子-视频全集】
评论