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")