Python之操作Excel、异常处理、网络编程

知识补充:

1.falsk模块中一些方法总结

import flask
from flask import request,jsonify
server = flask.Flask(__name__) #把当前文件当作一个服务

server.config[‘JSON_AS_ASCII‘] = False #不以ASCII码传

@server.route(‘/reg‘,methods=[‘post‘,‘get‘]) #接口方法前的修饰
methods有两个值:post和get

jsonify({"msg":"ok"}) #接口返回值时用到,将字典转化json串,json串为字符串
request模块获取普通元素值,json值,cooies值,session,header,文件
req=request.values.get(‘username‘) #获取值
req=request.json #获取json值
token = request.cookies.get(‘token‘) #获取cookie值
req = request.session.get(‘session‘) #获取session值
req = request.headers.get(‘header‘)#获取header值
f = request.files.get(‘file_name‘,None) #获取file
server.run(debug=True) #运行接口,port默认是5000,也可以自己指定,debug模式修改接口后会自动重启
server.run(port=8989,host=‘0.0.0.0‘)
#host写成0.0.0.0的话,其他人都可以访问,代表监听多块网卡上面所有的ip

2.加盐:提高安全性

salt=‘*hhf*2342234sdfs‘ 盐值自己定义,为一个随机字符串

盐值+密码+盐值 一起加密,会更安全

3.深拷贝、浅拷贝:

在python中,对象赋值实际上是对象的引用,当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用

举例说明:
(1)直接赋值, 传递对象的引用, 原始对象改变,被赋值的b也会做相同的改变
lis =[2,4,5,["A",1,2]]
b = lis
print(b)
lis.append(6)
print(b)
print(lis)
结果:
[2, 4, 5, [‘A‘, 1, 2]]
[2, 4, 5, [‘A‘, 1, 2], 6]
[2, 4, 5, [‘A‘, 1, 2], 6]

(2)copy浅拷贝,没有拷贝子对象,所以原始对象中元素改变,拷贝后对象中元素不变,原始对象子对象元素改变,拷贝后子对象中元素也跟着改变
import copy
lis =[2,4,5,["A",1,2]]
b = copy.copy(lis)
print("b的初始值",b)

lis.append(6)
print("lis添加元素后的值:",lis)
print("lis添加元素后b的值:",b)

lis[3].append(‘sss‘)
print("lis元素添加子元素后的值:",lis)
print("lis元素添加子元素后b的值:",b)
结果:
b的初始值 [2, 4, 5, [‘A‘, 1, 2]]
lis添加元素后的值: [2, 4, 5, [‘A‘, 1, 2], 6]
lis添加元素后b的值: [2, 4, 5, [‘A‘, 1, 2]] #lis添加元素,b的值未变
lis元素添加子元素后的值: [2, 4, 5, [‘A‘, 1, 2, ‘sss‘], 6]
lis元素添加子元素后b的值: [2, 4, 5, [‘A‘, 1, 2, ‘sss‘]]#lis中元素添加子元素后,b中的值也变了

(3)深拷贝,拷贝对象所有元素,原始对象的改变不会造成深拷贝里任何子元素的改变
import copy
lis =[2,4,5,["A",1,2]]
b = copy.deepcopy(lis)
print("b的初始值",b)

lis.append(6)
print("lis添加元素后的值:",lis)
print("lisi添加元素后b的值:",b)

lis[3].append(‘sss‘)
print("lis元素添加子元素后的值:",lis)
print("lis元素添加子元素后b的值:",b)
结果:
b的初始值 [2, 4, 5, [‘A‘, 1, 2]]
lis添加元素后的值: [2, 4, 5, [‘A‘, 1, 2], 6]
lisi添加元素后b的值: [2, 4, 5, [‘A‘, 1, 2]]
lis元素添加子元素后的值: [2, 4, 5, [‘A‘, 1, 2, ‘sss‘], 6]
lis元素添加子元素后b的值: [2, 4, 5, [‘A‘, 1, 2]]

一、Python操作excel

python操作excel,python操作excel使用xlrd、xlwt和xlutils模块,xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的。这几个模块使用pip安装即可

pip install xlrd

pip install xlwt

pip install xlutils

1.读取excel的操作

import xlrd
book = xlrd.open_workbook(r‘students.xlsx‘) #
#也可以写绝对路径,读excel的时候,xls,xlsx都可以
print(book.sheet_names())
#获取所有sheet页的名字

sheet = book.sheet_by_index(0)
#根据sheet页的位置去取sheet
sheet2 = book.sheet_by_name(‘Sheet2‘)
#根据sheet页的名字获取sheet页

print(sheet.nrows)#获取sheet页里面的所有行数
print(sheet.ncols)#获取sheet页里面的所有列数
print(sheet.row_values(0))#根据行号获取整行的数据
print(sheet.col_values(0))#根据列获取整列的数据

print(sheet.cell(1,1))#获取第2行第2列的数
#cell 方法是获取指定单元格数据,前面是行,后面是列
#结果:text:‘小明‘
print(sheet.cell(1,1).value)
#结果:小明

练习:读取表格中内容

格式如下:

[

{

"id":1,

"name":"小明",

"sex":"男"

},

]

代码如下:import xlrd
book = xlrd.open_workbook(r‘students.xlsx‘)
sheet = book.sheet_by_index(0)

lis=[]
for i in range(1,sheet.nrows):
#i代表的是每一行,因为第一行是表头,所以直接从第二行开始循环
dic ={}
id = sheet.cell(i,0).value#行是不固定的,列是固定的
name = sheet.cell(i,1).value
sex = sheet.cell(i,2).value
dic[‘id‘]=id
dic[‘name‘]=name
dic[‘sex‘]=sex
res.append(dic)
print(res)

2.写excel的操作

import xlwt
book = xlwt.Workbook()#新建一个excel对象
sheet = book.add_sheet(‘stu‘)#添加一个sheet页
sheet.write(0,0,‘编号‘) #将内容写到excel
book.save(‘stu.xls‘)#写excel的时候,你保存的文件名必须是xls

练习:将lis与title的内容写到Excel中

import xlwt
lis = [{‘id‘: 1, ‘name‘: ‘小明‘, ‘sex‘: ‘男‘},
{‘id‘: 2, ‘name‘: ‘小黑‘, ‘sex‘: ‘男‘},
{‘id‘: 3, ‘name‘: ‘小怪‘, ‘sex‘: ‘男‘},
{‘id‘: 4, ‘name‘: ‘小白‘, ‘sex‘: ‘女‘}]
title = [‘编号‘,‘姓名‘,‘性别‘]
book = xlwt.Workbook()#新建一个excel对象
sheet = book.add_sheet(‘stu‘)#添加一个sheet页
for i in range(len(title)):
#title多长,循环几次
sheet.write(0,i,title[i])
#i既是lis的下标,也代表每一列#处理表头

for row in range(len(lis)):
id=lis[row][‘id‘]
#因为lis里面存的是一个字典,lis[row]就代表字典里面的每一个元素,然后
#字典取固定的key就可以了
name=lis[row][‘name‘]
sex=lis[row][‘sex‘]
new_row =row+1#因为循环的时候 是从0开始循环的,第0行是表头,不能写
#要从第二行开始写,所以这里行数要加1
sheet.write(new_row,0,id)
sheet.write(new_row,1,name)
sheet.write(new_row,2,sex)
book.save(‘stu.xls‘)

3.修改excel内容

from xlutils.copy import copy
import xlrd,xlwt
book = xlrd.open_workbook(‘new_stu.xls‘)
#打开原来的excel
new_book = copy(book) #通过xlutils里面copy复制一个excel对旬
#print(dir(new_book)) 查看new_book下的方法
sheet = new_book.get_sheet(0) #获取sheet页
sheet.write(0,0,‘id‘)#写入修改的内容
new_book.save(‘new_stu_1.xls‘) #保存excel

二、异常处理

1. 常见的一些异常信息

AttributeError: 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
IOError:输入 / 输出异常,一般是无法打开文件
ImportError: 无法导入模块或包,一般是路径问题或名称错误
IndentationError:代码没有正确对齐,属于语法错误
IndexError:下标索引超出序列边界,比如x只有三个元素,却试图访问x[3]
KeyError:试图访问字典里不存在的键
KeyboardInterrupt:Ctrl + C被按下
NameError:使用一个还未被赋予对象的变量
SyntaxError: 语法错误
TypeError: 传入对象类型与要求的不符
UnboundLocalError:试图访问一个还未被设置的局部变量,一般是由于在代码块外部还有另一个同名变量
ValueError: 传入一个调用者不期望的值,即使值的类型是正确的

2.异常处理实例

(1)try...except..else...finally
info = {
"id":1,
"name":"xiaobai",
"sex":"nan",
}
choice =input(‘请输入你要查看的属性:‘)
try:
#print(info[choice])
print(info[choice]()) #也会报错 TypeError
except Exception as e:
#这个exception能捕捉到所有的异常
#Python3
#这个是出了异常的话,怎么处理,e代表异常信息
print("出错了,错误信息是:",e)
else:
#没有异常的话,走这里
print("没有出异常的话,走这里")
finally:
#不管有没有出异常都会走
#什么时候用:关闭文件,关闭数据库连接
print("这里是finally")

2.主动抛出异常

def is_correct_sql(sql):
sql_start =[‘select‘,‘update‘,‘insert‘,‘delete‘]
flag = 0
if sql.startswith(sql_start[0]) or sql.startswith(sql_start[1]) or sql.startswith(sql_start[2]) or sql.startswith(sql_start[3]):
return True
else:
raise TypeError #主动抛出异常
s = OpertionMysql(sql="xxxxxx")
print(s)

三、网络编程

1.urllib模块

requests模块就是基于urllib模块开发的,requests模块比较好用

(1)urlopen(url)发送get请求
from urllib.request import urlopen
import json
url= ‘//127.0.0.1:8888/json‘
data = {‘user_id‘:1}
req = request.urlopen(balance_url + ‘?‘ + new_balance_data) # 发送get请求
print(req.read().decode())
# 获取接口返回的结果,返回的结果是bytes类型的,需要使用decode方法解码,变成一个字符串

(2)urlopen()发送post请求
from urllib.request import urlopen
from urllib.parse import urlencode
import json
url2 = ‘http://127.0.0.1:8888/reg‘
data = {
"username":"haha",
"password":"123456",
"c_passwd":"123456"
}
print(urlencode(data))#把参数拼接成xxx=xxx&xxx=xxx
#结果:password=123456&username=haha&c_passwd=123456
param = urlencode(data).encode() #转成二进制
# 发送post请求,传入参数的话,参数必须是bytes类型,所以需要先encode一下,变成bytes类型
print(urlopen(url2,param).read().decode())

#print(urlopen(url2,urlencode(data)).read().decode())
#这种会报错 TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str

(3)url编码
from urllib.parse importquote,unquote,quote_plus,unquote_plus
url = ‘http://127.0.0.1:5000/reg:.,\\‘
url2 = "http%3A//127.0.0.1%3A5000/reg%3A.%2C%5C"
quote把特殊写字符变成url编码,quote_plus转更复杂的字符
unquote就是把url编码转成字符串,unquote_plus转更复杂的url编码
print(quote(url))
print(unquote(url2))
print(unquote_plus(url2))

2.requests模块
(1)调用get方法
import requests
url = ‘http://127.0.0.1:5000/get_sites‘
url2 = ‘http://127.0.0.1:5000/json‘
data = {‘user_id‘: 1}
res = requests.get(url).text
# 发送get请求,并获取返回结果,text获取的结果是一个字符串
res = requests.get(url,data).json()
# 发送get请求,并获取返回结果,json()方法获取的结果直接是一个字典
print(res)

(2)调用post方法
import requests
url_reg = ‘http://127.0.0.1:5000/reg?username=hha&password=123456&c_passwd=123456‘
#直接传拼接好的url
res = requests.post(url_reg).json()
print(type(res),res)

(3)入参是json串
url_set = ‘http://127.0.0.1:5000/set_sites‘
d = {
"name":"妞妞杂货铺",
"url":"http://www.nnzhp.cn"
}
#通过 json=xx来传值
res = requests.post(url_set,json=d).json()
print(res)

(3)添加cookie
import requests
cookie_url = "http://127.0.0.1:5000/set_cookies"
data = {‘userid‘:1,"money":9999}
cookie = {‘token‘:"token12345"}
res = requests.post(cookie_url,data=data,cookies={"token":"token1111"}).json()#使用cookies参数指定cookie
print(res)
#flask怎么获取cookie的值 request.cookies.get("cookie")

(4)发送文件
import requests
up_url = ‘http://127.0.0.1:5000/upload‘
file = {‘file_name‘:open(‘aaa.py‘)}
res = requests.post(up_url,files=file).text
#指定files参数,传文件,是一个文件对象
print(res)
时间: 2024-08-28 05:57:34

Python之操作Excel、异常处理、网络编程的相关文章

八、python操作excel及网络编程和异常处理

一.python操作excel 1.读excel,xlrd模块用来读excel # book = xlrd.open_workbook(r'students.xlsx')#打开excel# print(book.sheet_names())#获取所有sheet的名字# sheet = book.sheet_by_index(0)#根据sheet页的位置去取sheet# sheet2 = book.sheet_by_name('Sheet2')#根据sheet页的名字获取sheet页# print

第八篇:python基础_8 面向对象与网络编程

本篇内容 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程 一. 接口与归一化设计 1.定义 (1)归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了,这极大地降低了使用者的使用难度. (2)归一化使得高层的外部使用者可以不加区分的处理所有接口兼容的对象集合. 2.模拟接口 #!/usr/bin/env pyhon #encoding: utf-8 #auth: yanglei class Interface: #定义接口Interface类来模

Python全栈【Socket网络编程】

Python全栈[socket网络编程] 本章内容: Socket IO多路复用(select) SocketServer 模块(ThreadingTCPServer源码剖析) Socket socket通常也称作"套接字" 用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",对于文件用[打开][读写][关闭]模式

python基础教程总结13——网络编程,

1.网络设计模块 1.1 socket模块 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. 1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态. 2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字.为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套 接字的地址和端口号,然后就向服务器端套接字提出连接请求. 3)连接确认:是指

Python面向对象进阶和socket网络编程-day08

写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self,name): self.name=name p = Chinese('standby') # 实例化一个对象 print(p) # 打印这个对象 --- <__main__.Chinese object at 0x0000000000B3A978> - 示例2: >&g

从零开始学Python第八周:网络编程基础(socket)

Socket网络编程 一,Socket编程 (1)Socket方法介绍 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 套接字是一个双向的通信信道的端点.套接字可能在沟通过程,进程之间在同一台机器上,或在不同的计算机之间的进程 要创建一个套接字,必须使用Socket模块的socket.socket()方法 在socket模块中的一般语法: s = socket.

Python 读写操作Excel —— 安装第三方库(xlrd、xlwt、xlutils)

数据处理是 Python 的一大应用场景,而 Excel 则是最流行的数据处理软件.因此用 Python 进行数据相关的工作时,难免要和 Excel 打交道. 如果仅仅是要以表单形式保存数据,可以借助 CSV 格式(一种以逗号分隔的表格数据格式)进行处理,Excel 也支持此格式.但标准的 Excel 文件(xls/xlsx)具有较复杂的格式,并不方便像普通文本文件一样直接进行读写,需要借助第三方库来实现. 常用的库是 python-excel 系列: xlrd.xlwt.xlutils xlr

python面试题解析(网络编程与并发)

1.答: 应用层 与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的.例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层.但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层.示例:TELNET,HTTP,FTP,NFS,SMTP等. 表示层 这一层的主要功能是定义数据格式及加密.例如,FTP允许你选择以二进制或ASCII格式传输.如果选择二进制,那么发送方和接收方不改变文件的内容.如果选择ASCII格式,发

**.Python自学之路:网络编程

socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 1.首先来看一下简易版的客户端与服务器的搭建 客户端 #!/usr/bin/env python # -*- coding:utf-8 -*- import socket ip_port = ('127.0.0.1',9999) #测试地址与端口 sk = socket.socket() #生成句柄 sk.conne