在Python中从文本文件创建列表
我有一个文本文件,里面的内容大概是这样的:第一列是学生的名字,第二列是学分的数量,第三列是分数(分数乘以学时)。
john 5 15
bill 9 30
ted 7 22
我想创建一个类,用来提取相关信息并计算平均绩点(GPA)。
class Student:
def __init__(self, name, hours, qpoints):
self.name = name
self.hours = float(hours)
self.qpoints = float(qpoints)
def getName(self):
return self.name
def getHours(self):
return self.hours
def getQPoints(self):
return self.qpoints
def gps(self):
return self.qpoints/self.hours
我用来提取数据的方法是:因为每个信息之间都有一个制表符。
def makeStudent(info):
name, hours, qpoints = info.split("\t")
return Student(name, hours, qpoints)
在这里,我使用一个循环,根据文本文件中的数据创建一个列表,把每一行的相关信息添加到这个列表里。
def readStudents(filename):
infile = open(filename, 'r')
students = []
for line in infile:
students.append(makeStudent(line))
infile.close()
return students
问题是我遇到了这个错误:
[<__main__.Student object at 0x01FA4AD0>, <__main__.Student object at 0x01FA4AF0>,
<__main__.Student object at 0x01FA4B10>, <__main__.Student object at 0x01FA4B50>,
<__main__.Student object at 0x01FA4B30>]
有没有人知道为什么会发生这个问题?
5 个回答
0
你不会看到错误信息,而是会得到一堆学生对象的列表。你需要做的是实现一个 __str__
或者 __repr__
方法:特殊方法名称
2
大家都说,这不是错误。你只需要在你的 Student
类里实现 __str__
、__repr__
或 __unicode__
方法就可以了。
不过,我有一个小建议。你应该使用 csv模块 来读取你的文件。
你的 readStudents
函数也可以这样重写:
def readStudents(filename):
students = []
with open(filename) as infile:
for line in csv.reader(infile, delimiter='\t'): # or excel-tab if you want.
students.append(Student(**line))
return students
是不是很不错呢?
别忘了在你的 Python 文件开头加上 import csv
!