• 三、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()
    温故而知新
  • 相关阅读:
    读取Excel还用POI?试试这款开源工具
    Maven optional 关键字透彻图解
    Java 8 Stream Api 中的 peek 操作
    Lombok 使用详解,简化Java编程
    C# 基础知识系列- 16 开发工具篇
    C# 基础知识系列- 15 异常处理篇
    C# 基础知识系列- 14 IO篇 流的使用
    Java Spring Cloud 实战之路-01 框架选型
    C# 基础知识系列- 14 IO篇 文件的操作
    C# 基础知识系列- 14 IO篇 文件的操作
  • 原文地址:https://www.cnblogs.com/krystal-xiao/p/13623823.html
Copyright © 2020-2023  润新知