mysql,mongoDB在python应用试题及解析

1.现有如下图1所示的data.csv文件数据,请使用python读取该csv文件数据,并添加一条记录后输出如图2所示的output.csv文件

图一
image_1ccird9k414isl58u3j14921idu1p.png-23.5kB
图二
image_1ccirirrftue1uu4bcrfutcfg4m.png-22.8kB

import csv
#读取data.csv文件中的数据并通过result返回
def getData():
    with open("./data.csv",newline="") as csvFile:
        result = []
        reader = csv.DictReader(csvFile)
        for row in reader:
            result.append(row)
        csvFile.close()
    return result
#创建一个新的output.csv文件,将数据写入
with open("./output.csv","w",newline="") as csvFile:
    data = getData()
    data.append({"name":"Jack","stuNo":"104"})
    fieldnames = ["name","stuNo"]
    writer = csv.DictWriter(csvFile,fieldnames=fieldnames)
    writer.writerHeader()
    for row in data:
        writer.writerrow(row)
    csvFile.close()            

2、如下所示Excel表格数据,请编写python代码筛选出Points大于5的数据,并按Points进行排序后输出如图2所示的Excel文件结果


#方法1

import xlrd
myWorkbook=xlrd.open_workbook('rank.xlsx')
mysheets=myWorkbook.sheets()
sheet=mysheets[0]
nrows=sheet.nrows
ncols=sheet.ncols
# print(nrows)
# print(ncols)
list2=[]
list3=[]
for i in range(nrows):     #按行读取
    myRowValues=sheet.row_values(i)#出来的是一个个列表
    if i==0:
        list3.append(sheet.row_values(0))  #表头
    elif int(myRowValues[2]) > 5:
        print(myRowValues)   #输出的是大于5 的数据
#     # print(myRowValues)
for j in range(nrows):  # 按行读取
    myRowValues = sheet.row_values(j)  # 出来的是一个个列表
    k = myRowValues
    list2.append(k)
print(list2)

for i in range(1,len(list2)):
    for h in range(1,len(list2) - 1):
        if list2[i][2]>list2[h][2]:
            list2[i], list2[h] = list2[h], list2[i]
print(list2)
# # print(list3)
import xlwt
wbk=xlwt.Workbook()
sheet2=wbk.add_sheet('表01')    #新建表单
#写表头
for i in range(len(sheet.row_values(0))):
    sheet2.write(0,i,sheet.row_values(0)[i])  # 写
for j in range(1,len(list2)):#行
    for n in range(3): #列
        sheet2.write(j,n,list2[j][n])
wbk.save('rank2.xls')   #保存
print('ok')



#方法2
import  xlrd
import xlwt

#读取Excel数据
old_wbk = xlrd.open_workbook("rank.xlsx")
#获取工作簿中的第一个工作表
rank = old_wbk.sheets()[0]

#读取工作表中的数据

#第一步:获取工作表数据的行数
nrows = rank.nrows

# print("行数:",nrows)

#第二步:输出每一行数据(包含表头):
filterData = []     #保存筛选后的数据
for row in range(nrows):
    #从表中获取行数据
    myRowValue = rank.row_values(row)
    # print(myRowValue)
    #从所有的行数据中筛选出表头和points大于5的数据
    if row is 0 or myRowValue[2]>5.0:  
    #判断行数据,如果是第一行表头或者是points分数大于5.0的数据行保留
        # print(myRowValue)
        filterData.append(myRowValue)

# print(filterData)

#第三步:获取表头并写入到新的Excel表中
headers = filterData[0]
#创建一个新的工作簿
new_wbk = xlwt.Workbook()
#添加新的表
new_rank = new_wbk.add_sheet("new_rank")

for col in range(len(headers)):
    new_rank.write(0,col,headers[col])

# new_wbk.save("new_rank.xlsx")

#将表头从filterData中删除
del filterData[0]

# print(filterData)

#第四步:将points从筛选后的数据中分离出来

points = []
for item in filterData:
    points.append(item[2])

# print(points)
#对分数进行排序
points.sort(reverse=True)
# print(points)

resutl = []  #存放最终排序后的结果
#将筛选后的数据与排序后的分数进行比较,依次添加到新的列表中

for point in points:
    for row in filterData:
        if row[2] == point:
            resutl.append(row)

print(resutl)

for row in range(0,len(resutl)):
    for col in range(len(headers)):
        new_rank.write(row+1,col,resutl[row][col])


new_wbk.save("new_rank.xls")

3、编写python代码连接mysql数据库,并向movieRank表中新添加两条数据

import pymysql
connect=pymysql.connect(host="localhost",
                        user="root",
                        password="123123",
                        db="movies",
                        charset="utf8")
cursor=connect.cursor()
datas = [("犬之岛",617.35,0.0908,2,1309.09),\
("湮灭",135.34,0.0199,9,5556.77)] #数值
print(datas)
def insert(item):
    sql = "insert into movieRank values('%s','%f','%f','%d','%f')"  #组装
    cursor.execute(sql%item)
    connect.commit()
    print("成功添加了{}条数据".format(cursor.rowcount))
insert(datas[0])
insert(datas[1])

4、编写python代码,查询出所有的电影数据,并输出到一个Excel表movieRank.xlsx

import xlwt
sql3="select * from movieRank"
cursor.execute(sql3)
all=cursor.fetchall()
print(all)
tou=cursor.description
list1=[]
for i in range(len(tou)):
    list1.append(tou[i][0])    #表头
print(list1)
workbook=xlwt.Workbook()
mysheets=workbook.add_sheet("dianying")
for i in range(len(list1)):
    mysheets.write(0,i,list1[i])
for i in range(1,len(all)+1):
    for j in range(len(list1)):
        mysheets.write(i,j,all[i-1][j])
workbook.save('dianying.xls')
cursor.close()
connect.close()

5、编写python代码读取rooms.csv文件的中的数据,并将数据插入到rooms表中,添加到rooms表中

from pymongo import MongoClient
connect=MongoClient("localhost")
db=connect.building
rooms=db.rooms
#方法1
import csv ##################读取
list1=[]
with open("rooms.csv","r")as rooms1:
    reader=csv.reader(rooms1)
    for i in reader:
        list1.append(i)
        if i==[]:pass
        else:
            print(i)
# print(list1)
# ###############写入
list2=list1[0]
for i in range(1,len(list1)):
    list3=list1[i]
    dict2=dict(zip(list2,list3))
    # print(dict2)
    rooms.insert_one(dict2)
    print("执行了",i,"次")
 #方法2
 def getRooms():
    with open("rooms.csv") as csvFile:
        data = []
        reader = csv.DictReader(csvFile)
        for room in reader:
            data.append(dict(room))
        csvFile.close()
    return data

data = getRooms()
#将多条数据一次性添加到MongoDB中

rooms.insert_many(data)

6、求’Square Footage’的数据之和

#############3)求和
ss=rooms.find({},
{'_id':0,'RoomID':0,'Floor':0,'Use':0,'Capacity':0,'Price':0})
list5=[]
for i in ss:
    a=int(i['Square Footage'])
    list5.append(a)
    b=sum(list5)
print(b)

7、将数据以“points”>5.0 的排序,最后保存到新的csv文件中

#(4)
import pymongo
list6=[]
result4=rooms.find({},{"_id":0}) #去id
for i in result4:
    list6.append(i) #赋值
# print(list6)
for j in range(len(list6)):#  冒泡排序
    for k in range(len(list6)-1):
        if int(list6[j]['Price'])<int(list6[k]['Price']):
            list6[j],list6[k]=list6[k],list6[j]
print(list6)

#######rooms.find({},{"_id":0},sort =[('Price',pymongo.ASCENDING)])
#####这种方式排序必须是数字类型,而这道题中是字符串类型的数字,或者转换成数字类型的

rooms.remove()  #清空后添加
rooms.insert(list6)    #更新
result5=rooms.find({},{"_id":0})   #新的数序排列
k=[]
keys=list1[0]  #  list1见前面,为所有数据的大列表
k.append(keys)   #    保留表头的操作
print(k)
for i in result5:
    print(i)
    j=list(i.values())
    k.append(j)
print(k) #为写入做准备
#############写入
import csv
with open("rooms.csv","w")as paixu:
    for i in range(len(k)):
        writer=csv.writer(paixu)
        writer.writerows([k[i]])
print("ok")

猜你喜欢

转载自blog.csdn.net/sakura55/article/details/80434080
今日推荐