Python小例子-怎样按列关联两个txt文件?

问题定义

故事是这样的,我有两个txt文件,第一个是课程-学生成绩文件,第二个是课程和老师的对应关系,我想把课程的老师名字加到学生成绩文件,该怎么做呢?

如下是两个文件的截图:

图片

Python小例子-怎样按列关联两个txt文件?

第一个文件是【课程-学生-成绩】数据文件

文件名是course_student_grade_input.txt

它有这些数据列:课程名称、学生学号、学生姓名、学生成绩

第二文件是【课程-老师】-关系数据文件

文件名是course_teacher.txt

它有这些数据列:课程名称、老师姓名。

怎么实现把老师名称加到成绩文件作为一列呢?

实现思路

其实这个问题,非常类似SQL语句的 table_a join table_b on (teacher),在MySQL数据库的实现中join语句是通过对第一个表的每行数据,依次去查找第二个表的对应关联值来实现的,类似第二个表加载到内存,对第一个表的每一行依次查询第二个表。

而如果用Python实现的话,会借助字典实现,一般是如下图的思路:

图片

Python小例子-怎样按列关联两个txt文件?

简而言之,包含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。

0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论