Python基础(6)——sys模块、异常处理、发邮件、excel操作、连接mysql
目录:
一、sys模块
二、异常处理
三、发邮件
四、excel操作
五、连接mysql
正文:
一、sys模块
sys.argv
用来运行python文件的的时候传过来的参数
print(sys.argv)
当使用命令行执行
#使用方法 import sys,os command = sys.argv[1] if command == 'install': model_mame=sys.argv[2] print('install %s'%model_mame) elif command=='freeze': os.system('pip freeze') else: print('目前只支持install和freeze')
在terminal中执行本py文件并输入参数:

二、异常处理
1、异常:
2/0

使用try..except
try: '1'+2 except TypeError as e: #TypeError异常类型 print(e) print('出错了') try: 2/0 except ZeroDivisionError as e: #异常类型 print(e) print('除数不能为0')

2、常见异常类型
try: 2/0 except ZeroDivisionError as e: print(e) print('除数不能为0') except IndexError: print('下标错误') except KeyError: print('找不到字典key') except FileNotFoundError: print('文件打不开') else: print('没有异常')
3、简便写法
try: 2/0 except Exception as e: #捕捉到所有异常 print('出异常了',e) else: print('没有异常') finally: print('aaaa') #finally无论异常都会执行

finally适用于关闭文件等。
练习:判断是否为小数
def is_float(s): try: f=float(s) except: return False else: if f>0: return True print(is_float('s'))

4、直接抛出报错信息
import traceback def is_float(s): try: f=float(s) except: traceback.print_exc() #直接抛出错误信息 print(traceback.format_exc()) #打印报错信息,可写入数据库等 return False else: if f>0: return True print(is_float('s')) #报错打印的是调用堆栈信息

三、发邮件
1、安装
>pip install yamail
(基于yagmail改的)发附件如果是中文是乱码

2、邮箱配置

3、发邮件
import yamail # import yagmail 发附件如果有中文是乱码 smtp = yamail.SMTP(host='smtp.qq.com', #邮箱服务器 user='user@qq.com', password='123456789') # 如果是163、qq填写授权码 smtp.send(to=['987654321@qq.com'],#发送给谁 subject='你好,请查收附件', cc=['0000000@qq.com'],#抄送 contents='邮件正文', attachments=['a.txt']#附件,多个为list ) smtp.close()
四、excel操作
1、安装模块
pip install xlrd
pip install xlwt
pip install xlutils
2、写
import xlwt book = xlwt.Workbook() sheet = book.add_sheet('students') sheet.write(0,0,'id') sheet.write(0,1,'name') sheet.write(0,2,'age') sheet.write(1,0,'1') sheet.write(1,1,'xiaolei') sheet.write(1,2,'38') book.save('students.xls') #xlsx后缀微软office打不开

练习:写入excel并计算平均年龄
#编号 姓名 地址 年龄
#
stu = [
[1,'ds','bejing',51],
[2,'fd','shanghai',28],
[3,'zc','shanghai',16],
[4,'lhy','shanghai',21],
[5,'ylm','shanghai',35],
[6,'wxl','beijing',16],
]
---------------------------------------
方法1:
import xlwt stus = [ [1,'ds','bejing',51], [2,'fd','shanghai',28], [3,'zc','shanghai',16], [4,'lhy','shanghai',21], [5,'ylm','shanghai',35], [6,'wxl','beijing',16], ] stus.insert(0,['编号','姓名','地址','年龄']) book = xlwt.Workbook() sheet = book.add_sheet('sheet1') row = 0 for stu in stus: col=0 for s in stu: sheet.write(row,col,s) col+=1 row+=1 ages = [s[-1] for s in stus if type(s[-1])!=str] avg=round(sum(ages)/len(ages),2) content='平均年龄%s'%avg sheet.write(row, 0, content) book.save('students.xls')

方法2:
stus = [ [1,'ds','bejing',51], [2,'fd','shanghai',28], [3,'zc','shanghai',16], [4,'lhy','shanghai',21], [5,'ylm','shanghai',35], [6,'wxl','beijing',16], ] stus.insert(0,['编号','姓名','地址','年龄']) book = xlwt.Workbook() sheet = book.add_sheet('sheet1') for row,stu in enumerate(stus): #控制行 012345 for col,s in enumerate(stu): #控制列 sheet.write(row,col,s) ages = [s[-1] for s in stus if type(s[-1])!=str] avg=round(sum(ages)/len(ages),2) content='平均年龄%s'%avg sheet.write(row+1, 0, content) book.save('students.xls')
备注:
enumerate() 枚举函数 (0, 'a')返回元祖(下标,元素)
l=['a','b','c','d'] for index,item in enumerate(l): print('%s=>%s'%(index,item))

3、读excel
import xlrd book = xlrd.open_workbook('students.xls') # sheet=book.sheet_by_index(0) sheet=book.sheet_by_name('sheet1') print(book.sheets()) #所有sheet页,返回的是一个list,list里面就是每个sheet对象

import xlrd
book = xlrd.open_workbook('students.xls') # sheet=book.sheet_by_index(0) sheet=book.sheet_by_name('sheet1') for s in book.sheets(): print(s.row_values(2)) print(sheet.cell(0,0).value) #第0行0列 print(sheet.row_values(0)) #第0行取值list print(sheet.row_values(1)) print(sheet.col_values(0)) #第0列取值list
print(sheet.col_values(1)) print(sheet.nrows) #多少行 print(sheet.ncols) #多少列

4、修改excel
将地址栏beijing替换为北京,shanghai替换为上海
from xlutils import copy import xlrd book = xlrd.open_workbook('students.xls') sheet = book.sheet_by_index(0) new_book=copy.copy(book) #修改前记得copy copy_sheet=new_book.get_sheet(0) for row in range(1,sheet.nrows-1): #01234567 addr = sheet.cell(row,2).value addr=addr.replace('beijing','北京').replace('shanghai','上海') copy_sheet.write(row,2,addr) new_book.save('student.xls')

五、连接mysql
import pymysql #orcle sqlserver host = '127.0.0.1' user='user' password='123456'#字符串 db='jxz' port=3306 #int类型 #连接数据库 #autocommit=True 自动提交不用写connect.commit() connect=pymysql.connect(host=host,user=user,password=password,port=port,db=db,autocommit=True) #建立游标 cur = connect.cursor() cur.execute('select * from students ;') result = cur.fetchall() #只有select使用,拿到结果 print(result) cur.execute('update students set name="aaaa"where id=37;') # connect.commit() #提交 非自动提交除select外需要commit # connect.rollback()#回滚 cur.close() connect.close()

指针
cur.execute('select * from students limit 5; ') print('fetchmany',cur.fetchmany(2)) print('fetchone',cur.fetchone()) print('fetchall',cur.fetchall())#拿到所有结果

cur.execute('select * from students limit 5; ') for data in cur: print(data)

mysql返回数据字典
connect=pymysql.connect(host=host,user=user,password=password,port=port,db=db,autocommit=True) #建立游标,仓库管理员 cur = connect.cursor(pymysql.cursors.DictCursor) #指定游标类型,返回字典数据 cur.execute('select * from students limit 5; ') print('fetchall',cur.fetchall())#拿到所有结果 cur.close() connect.close()

设计表
print(cur.description) #获取表中描述(字段名及相关信息)

l=['a','b','c','d']
for index,item in enumerate(l):
print('%s=>%s'%(index,item))

浙公网安备 33010602011771号