三、Python基础(5)
(一)SYS模块
1、sys模块
import sys # 获取Python解释器的版本信息 sys.version # 返回操作系统平台名称 sys.platform # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.path # 获取系统当前编码,默认为:uft-8 sys.getdefaultencoding() # 设置系统的默认编码 sys.setdefaultencoding() # 获取文件系统使用编码方式,默认是utf-8 sys.getfilesystemencoding() # 用来获取运行Python文件的时候,传过来的参数 sys.argv
2、获取运行Python文件时的时候,传过来的参数
sys.argv:是一个脚本执行参数列表,列表的第一个元素是脚本名称,第二元素开始是参数:
(二)异常处理
1、下标越界:IndexError: list index out of range
2、找不到文件或文件夹:FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
3、无法将字符串转换为浮点:ValueError: could not convert string to float: 's.3'
4、程序中一旦遇到异常,程序就会停止抛出异常:捕获异常,处理异常
(1)一般捕捉异常用:try
(2)多方面考虑异常,捕获异常,打印出来:
try: '1' + 2 2 / 0 except TypeError as e: print(e) print('出错了') except ZeroDivisionError as e : print('除数不能为0') except IndexError: print('下标错误') except KeyError: print('找不到字典的Key')
except FileNotFoundError: print('文件打不开')
else: print('没有异常')
(3)捕捉到所有的异常:Exception
try: '1' + '2' 2 / 0 # Exception都可以捕捉到所有的异常,但判断不了清晰的异常信息 except Exception as e: print('出异常了',e) else: print('没有异常')
(4)不管有没有异常,最后必走的:finally
try: '1' + '2' 2 / 0 except Exception as e: print('出异常了',e) else: print('没有异常') finally: print('abc')
(5)实例定义异常函数:
def is_float(s): try: f = float(s) except: return False else: if f > 0: return True
(6)处理异常,调用堆栈信息,打印异常报错
import traceback def is_price(s): try: f = float(s) except Exception as e: traceback.print_exc() print('打印错误信息:',traceback.format_exc()) return False else: if f > 0: return True # 调用堆栈信息 is_price('abmdkkkde')
(三)发送邮件
1、首先需要安装yamail模块:pip install yamail
2、发送邮件,用什么邮箱都可以:例如QQ邮箱,需要进入设置-账户-开启授权码:
3、发送邮件程序:
import yamail # import yagmail 发附件的附件如果是中文名,是乱码(与yamail用法是一样的) # 改成自己邮箱的邮箱的服务器即可 smtp = yamail.SMTP(host='smtp.126.com', user='XXX@126.com', password='TXGDEDVEBEFZXSAZ') # 如果是163、qq等免费邮箱的话需要授权码 # 自己公司的邮箱,一般使用密码 # 发送给谁 smtp.send(to=['XXX@qq.com'], # 邮件主题 subject='good afternoon,请查收附件', # 抄送给谁,如果是多个人写list cc=['XXX@qq.com','YYY@qq.com'], # 邮件正文 contents='邮件正文', # 附件,如果是多个附件,写list attachments=['day06.txt','day07.txt'] ) smtp.close()
(四)关于Excel操作:Python中分别按照这三个模块
# 安装读取Excel pip install xlrd # 安装写入Excel pip install xlwt # 安装修改Excel pip install xlutils
1、写Excel
(1)实例一:
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,'Bob') sheet.write(1,2,'18') # 如果后缀写成xlsx,使用微软office打开 book.save('students.xls')
(2)实例二:
#编号 姓名 地址 年龄 stus = [ [1,'Ann','bejing',51], [2,'Mike','shanghai',28], [3,'Helen','shanghai',16], [4,'Bob','shanghai',21], [5,'Nancy','shanghai',35], [6,'John','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 for row,stu in enumerate(stus): for col,s in enumerate(stu): sheet.write(row,col,s) ages = [s[-1] for s in stus if type(s[-1])!=str] avg_age = round(sum(ages) / len(ages),2) content = '平均年龄:%s'%avg_age sheet.write(row+1,0,content) book.save('students.xls')
2、读取Excel
(1)需要导入:import xlrd
(2)实例如下:
import xlrd # 打开文件 book = xlrd.open_workbook('students.xls') # 根据sheet页获取数据 sheet = book.sheet_by_index(0) sheet = book.sheet_by_name('sheet1') # 获取所有的sheet页,返回的是一个list,list里面就是每个sheet对象 print(book.sheets()) for s in book.sheets(): print(s.row_values(2)) # 获取具体的单元格数据 print(sheet.cell(0,0).value) # 获取某一整行的数据 print(sheet.row_values(0)) print(sheet.row_values(1)) # 获取某一整列数据 print(sheet.col_values(0)) print(sheet.col_values(1)) # 获取多少行数据 print(sheet.nrows) # 获取多少列数据 print(sheet.ncols)
3、修改Excel
(1)需要导入:
from xlutils import copy
import xlrd
(2)修改Excel,实例如下:
from xlutils import copy import xlrd # 打开文件 book = xlrd.open_workbook('students.xls') sheet = book.sheet_by_index(0) # 拷贝一个新的模块进行修改 new_book = copy.copy(book) copy_sheet = new_book.get_sheet(0) for row in range(1,sheet.nrows-1): # 1 2 3 4 5 6 7 addr = sheet.cell(row,2).value addr = addr.replace('beijing','北京').replace('shanghai','上海') copy_sheet.write(row,2,addr) new_book.save('students.xls')
(七)MySQL操作
1、前提需要安装:pip install pymysql
2、需要导入:import pymysql
# 定义IP地址 host = '118.24.3.40' # 定义用户名 user = 'jxz' # 定义密码,只能是字符串 password = '123456' # 数据库名称DB db = 'jxz' # 定义端口号:int类型 port = 3306 # 连接数据库 connect = pymysql.connect(host = host, user = user, password = password , port = port ,db = db, autocommit = True # 自动提交 ) cur =connect.cursor() # 建立游标,仓库管理员 # 插入数据 cur.execute('insert into students values (2,"Amy","女","18","天马座","天津");') cur.execute('insert into students(name,class) values ("Ann","女","天马座");') # 删除数据 cur.execute('delete from students where id =123241;') cur.execute('update students set name = "Amy" where id = 2;') # connect.rollback() # 回滚 # insert语句、delete语句、update语句需要执行commit,才能执行生效,可以设置自动提交 connect.commit() # 查询表数据 cur.execute('select * from students limit 5;') # 表的描述 print(cur.description) result = cur.fetchall() #拿到所有的结果,是一个二维数组 print(cur.fetchone()) print(cur.fetchmany(2)) print(result) cur.close() connect.close()