我是python语言的新手。 我想将一行保存到文件并加载文件的特定行。 问题是我应该读取(加载)该文件的一行作为另一个(Grade)类的对象或将一行保存到文件中作为另一个类(Grade)的对象
我做到了,我想看看我是否做对了!
class Grade():
def __init__(self,student_id=0,course_id=0,score=0):
self._student_id = student_id
self._course_id = course_id
self._score = score
@property
def get(self):
return str(self._student_id)+" "+str(self._course_id)+" "+str(float(self._score))
@property
def student_id(self):
return str(self._student_id)
@property
def course_id(self):
return str(self._course_id)
@property
def score(self):
return str(self._score)
@student_id.setter
def student_id(self,student_id: int):
self._sutdent_id = student_id
@course_id.setter
def course_id(self,course_id: int):
self._course_id = course_id
@score.setter
def score(self,score: float):
self._score = score
class CourseUtil():
def __init__(self):
self._address = ''
def set_file(self,address):
self._address = address
def load(self,line_number):
fp = open(self._address)
for i, line in enumerate(fp):
if i+1 == line_number:
stri= line.split(" ")
stdid = int(stri[0])
corid = int(stri[1])
score = float(stri[2])
#here I want to save the #object that passed as argument to a file is it right?
grade = Grade(stdid,corid,score)
fp.close()
return(grade)
return print("None")
def save(self,grade):
i = 0
k = 0
fp = open(self._address)
for j,line in enumerate(fp):
k += 1
if grade.student_id in line and grade.course_id in line:
i += 1
break
fp.close()
if k > 0:
if i == 0:
with open(self._address,"a") as f:
f.write("\n"+grade.get)
elif k == 0 and i == 0:
with open(self._address,"a") as f:
f.write(grade.get)
在保存功能中,我检查了数据是否唯一,并避免在文件末尾使用\ n
答案 0 :(得分:0)
您使用的保存类条目行的模型效率低下。相反,您可以以更好的方式存储数据。我假设每个学生ID是唯一且可哈希的(字符串或整数)。因此,您只需拥有一本字典,其中包含有关每个学生的所有信息:
student_information = {
{student_id}: {
course_id: {course_id},
score: {score}
},
... # more students
}
现在,如果您想获取学生的信息,则只需执行student_information[student_id]
即可获取所需的数据。例如,您可以这样做:
grade = Grade(
student_id,
student_information[student_id]["course_id"],
student_information[student_id]["score"]
)
您可以轻松地将此字典设置为CourseUtil
类的实例变量。
现在,@ juanpa.arrivillaga提到您应该使用pickle
来存储该信息(如果您想稍后再使用它)。 Pickle允许您将数据(如字典)存储到文件中并加载。还有json
可以帮助您做同样的事情。