三、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()
温故而知新
原文地址:https://www.cnblogs.com/krystal-xiao/p/13623823.html