• python基础笔记(五):操作excel、mysql、redis


    一、操作excel

    写Excel

    写excel用到的模块是xlwt,基本操作步骤如下:

    import xlwt
    book=xlwt.Workbook() #创建一个xls
    sheet=book.add_sheet('sheet1') #添加一个sheet页,起个名字是sheet1
    sheet.write(0,0,'名字') #写excel,第一个数表是行,第二个数表示列       
    book.save('stu.xls')

    如果有一堆数据需要写到Excel,如何操作呢?

    import xlwt
    
    stus=[
        ['id', 'name', 'sex', 'age', 'addr', 'grade', 'phone', 'gold'],
        [314, '矿泉水', '', 18, '北京市昌平区', '摩羯座', '18317155663', 14405],
        [315, '矿泉水', '', 27, '上海', '摩羯座', '18317155664', 100],
        [5985, '矿泉水', '', 18, '北京市昌平区', '班级', '18513867663', 100]
    ]
    
    book=xlwt.Workbook() #创建一个xls
    sheet=book.add_sheet('sheet1') #添加一个sheet页,起个名字是sheet1
    #方法一:
    # row=0 #行号
    # for stu in stus: #控制循环行
    #     col=0 #列号
    #     for field in stu: #控制循环列的
    #         sheet.write(row,col,field)
    #         col+=1
    #     row+=1
    
    方法二:使用enumerate()函数
    for row,stu in enumerate(stus): #控制行,enumerate会自动计算每一个下标
        for col,field in enumerate(stu): #控制列的
            sheet.write(row,col,field)
            
    book.save('stu.xls')

    读Excel

    读excel用到的模块是xlrd

    import xlrd
    
    book = xlrd.open_workbook('stu.xls')
    sheet = book.sheet_by_index(0) #从第0个sheet打开
    sheet=book.sheet_by_name('sheet1') #通过sheet的名字打开
    result = sheet.cell(0,0).value #获取某个单元格的内容
    print('某个单元格的内容',result)
    
    row=sheet.row_values(0) #获取整行的内容
    print('某一行的内容',row)
    
    col = sheet.col_values(0) #获取整列的内容
    print('某一列的内容',col)
    
    print(sheet.nrows) #总共多少行
    print(sheet.ncols) #总共多少列
    
    for row_num in range(sheet.nrows): #如果不想要表头,则range(1,sheet.nrows)
        print(sheet.row_values(row_num))

    操作数据库还有一个模块是openpyxl,需要用pip安装一下才可以使用

    openpyxl模块都是从1开始,该模块写和修改excel很方便,读excel还是xlrd更方便
    import openpyxl
    #openpyxl模块都是从1开始
    
    #写excel
    # book=openpyxl.Workbook()
    # sheet=book.active #默认的sheet
    # # sheet2=book.get_sheet_by_name('sheet1') #根据sheet名字打开
    # # sheet.append(['id','name','phone']) #调用第一次写第一行,第二次写第二行以此类推
    # # sheet.append([1,'tt',123])
    # # sheet.append([2,'ee']) # 可以写部分
    # sheet['a1']='id' #指定a1列是id,可以指定写某个单元格
    # sheet['b1']='username'
    # sheet.cell(3,1,'5') #第三行第一列,写入5
    # book.save('user.xlsx')
    
    # #读excel
    book=openpyxl.load_workbook('user.xlsx')
    sheet=book.active
    # print(sheet.cell(1,1).value) #获取第一行第一列
    # print(sheet['a1'].value)
    # print(list(sheet.rows)) #获取所有行
    l=[]
    for row in sheet.rows:
        t=[]
        for col in row:
            t.append()
    
    # print(list(sheet.columns)) #获取所有列
    
    sheet.cell(1,1,'哈哈') #修改第一行第一列
    sheet.delete_cols(1)#删除列
    sheet.delete_rows(1)#删除行
    book.remove('sheet1') #删除sheet页

    二、操作数据库mysql

    导入模块mysql

    步骤:

    1、建立连接

    2、建立游标(建立游标时传入字典的类型pymysql.cursors.DictCursor,返回的即是字典)

    3、执行sql语句

    4、commit提交(如果不想每次都提交,在建立连接时加autocommit=True参数,会自动提交)

    5、获取结果

    6、关闭游标和连接

    import pymysql
    
    ip='128.10.0.40'
    user='admin'
    pwd='123456'
    db='admin'
    port=3306
    charset='utf8' #指定字符集utf8,避免有乱码
    conn = pymysql.connect(host=ip,user=user,password=pwd,db=db,port=port,charset=charset,autocommit=True) #建立连接
    
    cur=conn.cursor() #游标,返回的是二维数组
    #cur=conn.cursor(pymysql.cursors.DictCursor) ##游标,游标里传入字典的类型,返回的即是字典
    
    sql='select * from app_myuser limit 10;'
    '''
    增删改查
    sql='create table admin_user(id int unique not null, name varchar(20) not null, phone varchar(11) unique not null);'
    sql='insert into admin_user (id,name,phone) values (1,"小白","19812343211");'
    sql='insert into admin_user (id,name,phone) values (2,"小黑","17812343211");'
    sql='insert into admin_user (id,name,phone) values (3,"小蓝","17812343211");'
    sql='update admin_user set name="春光" where id =1;'
    sql_del='delete from admin_user where id=3;'
    '''
    cur.execute(sql) #执行sql语句,
    # conn.commit() #提交,insert,update,delete语句要加commit才可以提交到数据库,或者在连接数据库的时间加上autocommit=True参数会直接提交
    # one=cur.fetchone() #获取结果,取得是一条数据
    # many=cur.fetchmany(2) #获取多条数据,传入几返回几条,返回的是二维数组
    all=cur.fetchall() # 获取结果,返回所有的数据,返回的是二维数组
    cur.close() #关闭游标
    conn.close() #关闭连接
    # print(one)
    # print(many)
    print(all)

    封装一个数据函数:

    def op_mysql(sql):
        db_info = {'user': 'admin', 'password': '123456',
                'host': '110.10.0.10', 'db': 'admin', 'port': 3306, 'charset': 'utf8',
                'autocommit': True}
        conn = pymysql.connect(**db_info)  # 建立连接
        cur = conn.cursor(pymysql.cursors.DictCursor)  # 建立游标
        cur.execute(sql)  # 执行sql语句,insert 、update 、delete
        result = cur.fetchall() #拿到结果
        cur.close()
        conn.close()
        return result

     三、操作redis

    r=redis.Redis(host='110.10.3.40',password='HK139',port='6379',db=0,decode_responses=True) #db不指定默认是0,最后一个参数是自动转换字符串
    
    # 字符串
    # r.set('student','{"msg":"123"}',60) #增加 第三个参数是指定失效时间
    # r.expire('student',60) #如果开始没有指定失效时间,可以用这个重新设置失效时间
    # print(r.get('student').decode()) #获取,默认是二进制类型,加上decode会变成字符串,连接时加decode_responses=True参数,此时就可以不用decode(),
    # r.delete('student')  #删除
    # r.set('student','{"msg":"rtr"}') #修改
    
    
    #哈希类型
    r.hset('stud','ww''{"money":"123","addr":"beijing"}')
    r.hset('stud','hh''{"money":"123","addr":"beijing"}')
    
    r.hdel('stud','hh') #删除
    print(r.hget('stud','ww'))
    print(r.hgetall('stud')) #获取所有的
    
    # r.flushall() #清空所有数据库的内容
    # r.flushdb() #清空当前数据库里面的内容
    # r.exists('name') #判断key是否存在
    # r.keys() #获取当前数据库所有的key
    # r.type('name') #获取key的类型
  • 相关阅读:
    poj 3669 Meteor Shower
    poj 3232 Accelerator
    poj 2155 Matrix
    poj 3628 Bookshelf 2
    cf C. Maze
    cf B. Fox Dividing Cheese
    hdu Children’s Queue
    cf D. Broken Monitor
    cf C. Mittens
    cf B. Berland Bingo
  • 原文地址:https://www.cnblogs.com/tata-learning/p/11774876.html
Copyright © 2020-2023  润新知