码迷,mamicode.com
首页 > 数据库 > 详细

Python练习【6】【数据库操作 | 文件读写】

时间:2019-01-17 16:28:52      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:dom   eve   varchar   mys   float   commit   屏幕   line   文件中   

1. 面向对象,文件操作与数据库操作复习题目: 文件score.dat中保存的是100名学生的姓名和Python课、高数和英语成绩。 (1)定义学生类,其中包含姓名、Python课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。 (2)读入这名学生的成绩,用对象列表进行存储。 (3)求出各科和总分的最高分。 (4)请按总分的降序(高成绩在前,低成绩在后)排序 (5)在屏幕上显示各科及总分的最高分,排序后的成绩单(包括总分)保存到文件odered_score.dat中。 (6) 将文件中的所有学生信息, 保存在mariadb数据库中;
import pymysql
import random
import os
if not os.path.exists(‘./score.dat‘):
    with open(‘./score.dat‘,‘w+‘) as file:
        for i in range(100):
            file.write(‘St‘+str(i)+‘,‘+‘,‘.join([str(random.randint(20,100))for j in range(3)])+‘\n‘)

# (1)定义学生类,其中包含姓名、Python课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。
class Student(object):
    def __init__(self,name,py_score,ma_score,en_score):
        self.name=name
        self.py_score = py_score
        self.ma_score = ma_score
        self.en_score = en_score
    @property
    def sum_score(self):
        return self.py_score+self.ma_score+self.en_score

    @property
    def even(self):
        return self.sum_score/3

# (2)读入这名学生的成绩,用对象列表进行存储。
st1=Student(‘tom‘,13,23,24)
with open(‘./score.dat‘,‘r‘) as file:
    score_data=file.readlines()
    score_li=[]
    for i in score_data:
        oneData=i.rstrip(‘\n‘).split(‘,‘)
        score_li.append(Student(oneData[0],int(oneData[1]),int(oneData[2]),int(oneData[3])))

# (3)求出各科和总分的最高分。
py_max=max([i.py_score for i in score_li])
ma_max=max([i.py_score for i in score_li])
en_max=max([i.py_score for i in score_li])
sum_max=max([i.sum_score for i in score_li])

#(4)请按总分的降序(高成绩在前,低成绩在后)排序
score_li=sorted(score_li,key=lambda x:-x.sum_score)

# (5)在屏幕上显示各科及总分的最高分,排序后的成绩单(包括总分)保存到文件odered_score.dat中。

print("""
python课程最高分:{0}
高等数学课程最高分:{1}
英语课程最高分:{2}
总分最高分:{3}
""".format(py_max, ma_max, en_max, sum_max))
with open(‘./odered_score.dat‘,‘w+‘) as file:
    for i in score_li:
        file.write(‘%s,%s,%s,%s,%s\n‘%(i.name,i.py_score,i.ma_score,i.en_score,i.sum_score))
    file.seek(0,0)

# (6) 将文件中的所有学生信息, 保存在mariadb数据库中;
## 连接数据库
con = pymysql.connect(
    host=‘localhost‘,
    user=‘root‘,
    passwd=‘redhat‘,
    autocommit=True,
    charset =‘utf8‘
)
cur = con.cursor() # 创建游标
cur.execute(‘create database if not exists St_scores‘) # 创建数据库
con.select_db(‘St_scores‘) # 选择对应数据库
cur.execute(‘create table if not exists scores_data(姓名 varchar(20),python float,高等数学 float,英语 float,总分 float)default charset=utf8‘) # 创建表
# 读取文件中的数据并写入数据表
with open(‘./odered_score.dat‘) as file:
    line_data=file.readlines()
    for onedata in line_data:
        data=onedata.rstrip(‘\n‘).split(‘,‘)
        data=[data[0]]+[float(i) for i in data[1:]]
        cur.execute(‘insert into scores_data values("%s",%f,%f,%f,%f)‘%(data[0],data[1],data[2],data[3],data[4]))

Python练习【6】【数据库操作 | 文件读写】

标签:dom   eve   varchar   mys   float   commit   屏幕   line   文件中   

原文地址:http://blog.51cto.com/13992211/2343821

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!