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))
posted @ 2020-09-11 17:06  白羽归楼  阅读(359)  评论(0)    收藏  举报