知识补充:
1.falsk模块中一些方法总结
  1. import flask
  2. from flask import request,jsonify
  3. server = flask.Flask(__name__) #把当前文件当作一个服务
  4.  
  5. server.config['JSON_AS_ASCII'] = False #不以ASCII码传
  6.  
  7. @server.route('/reg',methods=['post','get']) #接口方法前的修饰
  8. methods有两个值:postget
  9.  
  10. jsonify({"msg":"ok"}) #接口返回值时用到,将字典转化json串,json串为字符串
  11. request模块获取普通元素值,json值,cooies值,session,header,文件
  12. req=request.values.get('username') #获取值
  13. req=request.json #获取json值
  14. token = request.cookies.get('token') #获取cookie值
  15. req = request.session.get('session') #获取session值
  16. req = request.headers.get('header')#获取header
  17. f = request.files.get('file_name',None) #获取file
  18. server.run(debug=True) #运行接口,port默认是5000,也可以自己指定,debug模式修改接口后会自动重启
  19. server.run(port=8989,host='0.0.0.0')
  20. #host写成0.0.0.0的话,其他人都可以访问,代表监听多块网卡上面所有的ip
2.加盐:提高安全性
salt='*hhf*2342234sdfs' 盐值自己定义,为一个随机字符串
盐值+密码+盐值 一起加密,会更安全
 
3.深拷贝、浅拷贝:
在python中,对象赋值实际上是对象的引用,当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用
  1. 举例说明:
  2. 1)直接赋值, 传递对象的引用, 原始对象改变,被赋值的b也会做相同的改变
  3. lis =[2,4,5,["A",1,2]]
  4. b = lis
  5. print(b)
  6. lis.append(6)
  7. print(b)
  8. print(lis)
  9. 结果:
  10. [2, 4, 5, ['A', 1, 2]]
  11. [2, 4, 5, ['A', 1, 2], 6]
  12. [2, 4, 5, ['A', 1, 2], 6]
  13.  
  14. 2copy浅拷贝,没有拷贝子对象,所以原始对象中元素改变,拷贝后对象中元素不变,原始对象子对象元素改变,拷贝后子对象中元素也跟着改变
  15. import copy
  16. lis =[2,4,5,["A",1,2]]
  17. b = copy.copy(lis)
  18. print("b的初始值",b)
  19.  
  20. lis.append(6)
  21. print("lis添加元素后的值:",lis)
  22. print("lis添加元素后b的值:",b)
  23.  
  24. lis[3].append('sss')
  25. print("lis元素添加子元素后的值:",lis)
  26. print("lis元素添加子元素后b的值:",b)
  27. 结果:
  28. b的初始值 [2, 4, 5, ['A', 1, 2]]
  29. lis添加元素后的值: [2, 4, 5, ['A', 1, 2], 6]
  30. lis添加元素后b的值: [2, 4, 5, ['A', 1, 2]] #lis添加元素,b的值未变
  31. lis元素添加子元素后的值: [2, 4, 5, ['A', 1, 2, 'sss'], 6]
  32. lis元素添加子元素后b的值: [2, 4, 5, ['A', 1, 2, 'sss']]#lis中元素添加子元素后,b中的值也变了
  33.  
  34. 3)深拷贝,拷贝对象所有元素,原始对象的改变不会造成深拷贝里任何子元素的改变
  35. import copy
  36. lis =[2,4,5,["A",1,2]]
  37. b = copy.deepcopy(lis)
  38. print("b的初始值",b)
  39.  
  40. lis.append(6)
  41. print("lis添加元素后的值:",lis)
  42. print("lisi添加元素后b的值:",b)
  43.  
  44. lis[3].append('sss')
  45. print("lis元素添加子元素后的值:",lis)
  46. print("lis元素添加子元素后b的值:",b)
  47. 结果:
  48. b的初始值 [2, 4, 5, ['A', 1, 2]]
  49. lis添加元素后的值: [2, 4, 5, ['A', 1, 2], 6]
  50. lisi添加元素后b的值: [2, 4, 5, ['A', 1, 2]]
  51. lis元素添加子元素后的值: [2, 4, 5, ['A', 1, 2, 'sss'], 6]
  52. 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的操作
  1. import xlrd
  2. book = xlrd.open_workbook(r'students.xlsx') #
  3. #也可以写绝对路径,读excel的时候,xls,xlsx都可以
  4. print(book.sheet_names())
  5. #获取所有sheet页的名字
  6.  
  7. sheet = book.sheet_by_index(0)
  8. #根据sheet页的位置去取sheet
  9. sheet2 = book.sheet_by_name('Sheet2')
  10. #根据sheet页的名字获取sheet页
  11.  
  12. print(sheet.nrows)#获取sheet页里面的所有行数
  13. print(sheet.ncols)#获取sheet页里面的所有列数
  14. print(sheet.row_values(0))#根据行号获取整行的数据
  15. print(sheet.col_values(0))#根据列获取整列的数据
  16.  
  17. print(sheet.cell(1,1))#获取第2行第2列的数
  18. #cell 方法是获取指定单元格数据,前面是行,后面是列
  19. #结果:text:'小明'
  20. print(sheet.cell(1,1).value)
  21. #结果:小明
练习:读取表格中内容
格式如下:
[
{
"id":1,
"name":"小明",
"sex":"男"
},
 ]
  1. 代码如下:
    import xlrd
  2. book = xlrd.open_workbook(r'students.xlsx')
  3. sheet = book.sheet_by_index(0)
  4.  
  5. lis=[]
  6. for i in range(1,sheet.nrows):
  7. #i代表的是每一行,因为第一行是表头,所以直接从第二行开始循环
  8. dic ={}
  9. id = sheet.cell(i,0).value#行是不固定的,列是固定的
  10. name = sheet.cell(i,1).value
  11. sex = sheet.cell(i,2).value
  12. dic['id']=id
  13. dic['name']=name
  14. dic['sex']=sex
  15. res.append(dic)
  16. print(res)
2.写excel的操作
  1. import xlwt
  2. book = xlwt.Workbook()#新建一个excel对象
  3. sheet = book.add_sheet('stu')#添加一个sheet
  4. sheet.write(0,0,'编号') #将内容写到excel
  5. book.save('stu.xls')#写excel的时候,你保存的文件名必须是xls

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

  1. import xlwt
  2. lis = [{'id': 1, 'name': '小明', 'sex': '男'},
  3. {'id': 2, 'name': '小黑', 'sex': '男'},
  4. {'id': 3, 'name': '小怪', 'sex': '男'},
  5. {'id': 4, 'name': '小白', 'sex': '女'}]
  6. title = ['编号','姓名','性别']
  7. book = xlwt.Workbook()#新建一个excel对象
  8. sheet = book.add_sheet('stu')#添加一个sheet
  9. for i in range(len(title)):
  10. #title多长,循环几次
  11. sheet.write(0,i,title[i])
  12. #i既是lis的下标,也代表每一列#处理表头
  13.  
  14. for row in range(len(lis)):
  15. id=lis[row]['id']
  16. #因为lis里面存的是一个字典,lis[row]就代表字典里面的每一个元素,然后
  17. #字典取固定的key就可以了
  18. name=lis[row]['name']
  19. sex=lis[row]['sex']
  20. new_row =row+1#因为循环的时候 是从0开始循环的,第0行是表头,不能写
  21. #要从第二行开始写,所以这里行数要加1
  22. sheet.write(new_row,0,id)
  23. sheet.write(new_row,1,name)
  24. sheet.write(new_row,2,sex)
  25. book.save('stu.xls')
3.修改excel内容
  1. from xlutils.copy import copy
  2. import xlrd,xlwt
  3. book = xlrd.open_workbook('new_stu.xls')
  4. #打开原来的excel
  5. new_book = copy(book) #通过xlutils里面copy复制一个excel对旬
  6. #print(dir(new_book)) 查看new_book下的方法
  7. sheet = new_book.get_sheet(0) #获取sheet页
  8. sheet.write(0,0,'id')#写入修改的内容
  9. new_book.save('new_stu_1.xls') #保存excel
二、异常处理
1. 常见的一些异常信息
  1. AttributeError 试图访问一个对象没有的属性,比如foo.x,但是foo没有属性x
  2. IOError:输入 / 输出异常,一般是无法打开文件
  3. ImportError 无法导入模块或包,一般是路径问题或名称错误
  4. IndentationError:代码没有正确对齐,属于语法错误
  5. IndexError:下标索引超出序列边界,比如x只有三个元素,却试图访问x[3]
  6. KeyError:试图访问字典里不存在的键
  7. KeyboardInterruptCtrl + C被按下
  8. NameError:使用一个还未被赋予对象的变量
  9. SyntaxError 语法错误
  10. TypeError 传入对象类型与要求的不符
  11. UnboundLocalError:试图访问一个还未被设置的局部变量,一般是由于在代码块外部还有另一个同名变量
  12. ValueError 传入一个调用者不期望的值,即使值的类型是正确的
2.异常处理实例
  1. (1)try...except..else...finally
  2. info = {
  3. "id":1,
  4. "name":"xiaobai",
  5. "sex":"nan",
  6. }
  7. choice =input('请输入你要查看的属性:')
  8. try:
  9. #print(info[choice])
  10. print(info[choice]()) #也会报错 TypeError
  11. except Exception as e:
  12. #这个exception能捕捉到所有的异常
  13. #Python3
  14. #这个是出了异常的话,怎么处理,e代表异常信息
  15. print("出错了,错误信息是:",e)
  16. else:
  17. #没有异常的话,走这里
  18. print("没有出异常的话,走这里")
  19. finally:
  20. #不管有没有出异常都会走
  21. #什么时候用:关闭文件,关闭数据库连接
  22. print("这里是finally")
 
2.主动抛出异常
  1. def is_correct_sql(sql):
  2. sql_start =['select','update','insert','delete']
  3. flag = 0
  4. if sql.startswith(sql_start[0]) or sql.startswith(sql_start[1]) or \
  5. sql.startswith(sql_start[2]) or sql.startswith(sql_start[3]):
  6. return True
  7. else:
  8. raise TypeError #主动抛出异常
  9. s = OpertionMysql(sql="xxxxxx")
  10. print(s)
三、网络编程
1.urllib模块
requests模块就是基于urllib模块开发的,requests模块比较好用
  1. 1urlopen(url)发送get请求
  2. from urllib.request import urlopen
  3. import json
  4. url= '//127.0.0.1:8888/json'
  5. data = {'user_id':1}
  6. req = request.urlopen(balance_url + '?' + new_balance_data) # 发送get请求
  7. print(req.read().decode())
  8. # 获取接口返回的结果,返回的结果是bytes类型的,需要使用decode方法解码,变成一个字符串
  9.  
  10. 2urlopen()发送post请求
  11. from urllib.request import urlopen
  12. from urllib.parse import urlencode
  13. import json
  14. url2 = 'http://127.0.0.1:8888/reg'
  15. data = {
  16. "username":"haha",
  17. "password":"",
  18. "c_passwd":""
  19. }
  20. print(urlencode(data))#把参数拼接成xxx=xxx&xxx=xxx
  21. #结果:password=123456&username=haha&c_passwd=123456
  22. param = urlencode(data).encode() #转成二进制
  23. # 发送post请求,传入参数的话,参数必须是bytes类型,所以需要先encode一下,变成bytes类型
  24. print(urlopen(url2,param).read().decode())
  25.  
  26. #print(urlopen(url2,urlencode(data)).read().decode())
  27. #这种会报错 TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str
  28.  
  29. 3url编码
  30. from urllib.parse importquote,unquote,quote_plus,unquote_plus
  31. url = 'http://127.0.0.1:5000/reg:.,\\'
  32. url2 = "http%3A//127.0.0.1%3A5000/reg%3A.%2C%5C"
  33. quote把特殊写字符变成url编码,quote_plus转更复杂的字符
  34. unquote就是把url编码转成字符串,unquote_plus转更复杂的url编码
  35. print(quote(url))
  36. print(unquote(url2))
  37. print(unquote_plus(url2))
  38.  
  39. 2.requests模块
  40. (1)调用get方法
  41. import requests
  42. url = 'http://127.0.0.1:5000/get_sites'
  43. url2 = 'http://127.0.0.1:5000/json'
  44. data = {'user_id': 1}
  45. res = requests.get(url).text
  46. # 发送get请求,并获取返回结果,text获取的结果是一个字符串
  47. res = requests.get(url,data).json()
  48. # 发送get请求,并获取返回结果,json()方法获取的结果直接是一个字典
  49. print(res)
  50.  
  51. 2)调用post方法
  52. import requests
  53. url_reg = 'http://127.0.0.1:5000/reg?username=hha&password=123456&c_passwd=123456'
  54. #直接传拼接好的url
  55. res = requests.post(url_reg).json()
  56. print(type(res),res)
  57.  
  58. 3)入参是json
  59. url_set = 'http://127.0.0.1:5000/set_sites'
  60. d = {
  61. "name":"妞妞杂货铺",
  62. "url":"http://www.nnzhp.cn"
  63. }
  64. #通过 json=xx来传值
  65. res = requests.post(url_set,json=d).json()
  66. print(res)
  67.  
  68. 3)添加cookie
  69. import requests
  70. cookie_url = "http://127.0.0.1:5000/set_cookies"
  71. data = {'userid':1,"money":9999}
  72. cookie = {'token':"token12345"}
  73. res = requests.post(cookie_url,data=data,cookies={"token":"token1111"}).json()#使用cookies参数指定cookie
  74. print(res)
  75. #flask怎么获取cookie的值 request.cookies.get("cookie")
  76.  
  77. (4)发送文件
  78. import requests
  79. up_url = 'http://127.0.0.1:5000/upload'
  80. file = {'file_name':open('aaa.py')}
  81. res = requests.post(up_url,files=file).text
  82. #指定files参数,传文件,是一个文件对象
  83. print(res)
 

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

  1. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

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

    本篇内容 接口与归一化设计 多态与多态性 封装 面向对象高级 异常处理 网络编程 一. 接口与归一化设计 1.定义 (1)归一化让使用者无需关心对象的类是什么,只需要知道这些对象都具备某些功能就可以了 ...

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

    1.网络设计模块 1.1 socket模块    根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. 1)服务器监听:是服务器端套接 ...

  4. Python“文件操作”Excel篇(上)

    大家好,我们今天来一起探索一下用Python怎么操作Excel文件.与word文件的操作库python-docx类似,Python也有专门的库为Excel文件的操作提供支持,这些库包括xlrd.xlw ...

  5. Python读写操作Excel模块_xlrd_xlwt_xlutils

    Python 读写操作Excel -- 安装第三方库(xlrd.xlwt.xlutils.openpyxl) 如果仅仅是要以表单形式保存数据,可以借助 CSV 格式(一种以逗号分隔的表格数据格式)进行 ...

  6. Python Pandas操作Excel

    Python Pandas操作Excel 前情提要 ☟ 本章使用的 Python3.6 Pandas==0.25.3 项目中需要用到excel的文件字段太多 考虑到后续字段命名的变动以及中文/英文/日 ...

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

    写在前面 上课第八天,打卡: 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __i ...

  8. Python学习(十三) —— 网络编程

    一.操作系统基础 操作系统(Operating System):OS是管理和控制计算机硬件和软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行 ...

  9. Python面向对象进阶和socket网络编程

    写在前面 为什么坚持?想一想当初: 一.面向对象进阶 - 1.反射补充 - 通过字符串去操作一个对象的属性,称之为反射: - 示例1: class Chinese: def __init__(self ...

随机推荐

  1. [Vue] Props Validations

    Components can specify requirements for its props, such as the types you’ve already seen. If a requi ...

  2. [Vue @Component] Pass Vue Render Functions as Props for Powerful Patterns

    Render functions open up a world of customization and control by using pure JavaScript rather than V ...

  3. 解决华为手机不出现logcat日志的问题

    问题描写叙述:公司一部华为手机在连接Eclipse时在Logcat中看不到相关日志 解决方法:1 进入手机拨号界面2 输入*#*#2846579#*#*3 输入完成后自己主动跳转到測试界面4 依次选择 ...

  4. Wordpress的安装 for mac

    1.服务器环境要求 PHP 5.2.4或更新版本 MySQL 5.0或更新版本 Apache mod_rewrite模块(可选,用于支持“固定链接”和“站点网络”功能) 选择安装:XAMPP 2.XA ...

  5. [Android]通过adb shell input上报命令模拟屏幕点击事件【转】

    本文转载自:http://blog.csdn.net/yuanzihui/article/details/52871652 常用的 input上报命令: input text 1234 实际向界面注入 ...

  6. SQL service

    依赖关系解决 ============================================================================================= ...

  7. Akka源码分析-Actor发消息(续)

    上一篇博客我们分析道mailbox同时也是一个forkjointask,run方法中,调用了processMailbox处理一定数量的消息,然后最终调用dispatcher的registerForEx ...

  8. Spring实例化bean之后的处理, 关于BeanPostProcessor接口的使用

    业务需求:缓存页面,展示需要缓存的所有对象,每类对象在字典表中有编码对应,点击某个对象可以缓存某类对象,每类对象都有自己的缓存runner(弱弱的说一句,本人看到这里的第一反应就是if-else,捂脸 ...

  9. DFS之城堡问题

    2019-06-01 17:54:51 坚持!! 题目链接: http://bailian.openjudge.cn/practice/2815 #include <bits/stdc++.h& ...

  10. Centos7 时间不正确修复

    查看系统支持的时区列表 timedatectl list-timezones 使用 date -R 查看时区是否正确 date -R 修改时区 timedatectl set-timezone Asi ...