zoukankan      html  css  js  c++  java
  • day6

    map/filter
    生成器-map:
    1.是为了节省内存的;
    2.循环帮你调用函数的,
    3.每次循环的时候,就按照这个规则(你写的逻辑)去生成一个数据;
    例1:
    import os
    def makeir(dir_name):
        if not os.path.isdir(dir_name):
            os.mkdir(dir_name)
            return True
     
    dirs_names=['android','ios','tomcat','java','python','php','nginx']
    res=map(makeir,dirs_names) #使用map,返回的是一个生成器
    print(res)
     
    res=list(map(makeir,dirs_names)) #map强制转换成list,自动循环list,循环帮你调用函数,返回的是返回值
    print(res)
     
    例2:
    import time
    def timestamptostr(timestamp=None,format='%Y-%m-%d %H:%M:%S'):
        if timestamp:
            time_tuple=time.localtime(timestamp) #转成时间元组
            return time.strftime(format,time_tuple) # 把时间元组转成格式化好的时间
        return time.strftime(format)
     
    all_data=[timestamptostr(int(time.time())-86400*i) for i in range(10)] #使用大括号是一个list;用空间换时间
    print(all_data)
     
    all_data=(timestamptostr(int(time.time())-86400*i) for i in range(10)) #使用小括号是一个生成器,返回的是一个生成器;
    节省空间,增加cpu的计算时间
    print(all_data)
    for a in all_data: #循环生成器,内存里始终只有一个数据,前面的数据会被释放掉
        print(a)
     
    过滤器-filter:
    例1:
    def my(num):
        if num%2==0:
            return True
    res=list(filter(my,range(10))) #过滤,它把函数出来结果为假的数据给处理掉了,只保留函数返回真的数据
    print(res)
     
    res=list(map(my,range(10)))
    print(res) #不管你返回啥,我都给你拿到
     
     
    os模块补充:
    import os
    print(os.path.abspath('a'))      #获取绝对路径
    print(os.path.abspath('.\a'))   #.代表当前目录
    print(os.path.abspath('..\a'))  #..上一级目录
     
    os.chdir('e:\pythoncode\day5')   #切换目录
    print(os.getcwd())
     
    res=os.system('ipconfig')  #用来执行操作系统命令,但是只能帮你执行,获取不到他的结果,执行成功为0
    print('res...',res)
     
    res=os.popen('ipconfig').read()
    print('res的结果...',res)  #用来执行操作系统命令,能获取到他的结果
     
    datetime模块
    import datetime
    print(datetime.date.today()) #当天的日期,只有日期
    print(datetime.datetime.today()) #当天的时间,有日期和时间
    print(datetime.date.today()+datetime.timedelta(days=10))  #指定天数,取日期
    print(datetime.datetime.today()+datetime.timedelta(hours=-10,minutes=-20))  #指定时分秒,取时间
    res=datetime.datetime.today()+datetime.timedelta(hours=-10,minutes=-20)
    print(res.time())  #只取时间
    print(res.date())  #只取日期
    print(res.timestamp()) #取时间戳
    print(res.strftime('%Y-%m-%d %H:%M:%S')) #取格式化好的时间
     
    random模块
    import random
    print(random.random()) #取小于1的随机小数
    print(random.randint(1,10)) #指定范围,取随机的整数
    s='fjdkrjekwjr'
    print(random.choice(s)) #随机选择一个,只能选一个
    print(random.sample(s,6)) #随机选择N个值,返回的是一个list
    print(random.uniform(8.5,8.8))#指定范围,然后取一个随机小数
     
    写日志
    import nnlog
    my_log=nnlog.Logger('ht.log',when='D',backCount=5)#when='D'指按什么生成日志,D为天,S为秒;backCount=5指最大保留几个日志文件
    my_log.debug('这是debug的')
    my_log.info('这是info级别的')
    my_log.warning('这是warning级别的')
    my_log.error('出错了 级别的')
     
    发送邮件
    import yagmail
    passwd='xxxxxxx'
    mail=yagmail.SMTP(user=username,password=passwd,host='smtp.exmail.qq.com') #连接邮箱
              subject='吃了吗?',contents='没吃的话,就吃点',attachments=r'E:hhh123goods.py')
    #to:收件人邮箱;cc:抄送人;subject:标题;contents:发送内容;attachments:附件;
    #安全协议,smtp_ssl=True如果是qq邮箱需要加这个参数
     
    操作数据库
    1、连上数据库 ip 账号密码  端口号 数据库
    2、执行sql
    3、获取到结果
    import pymysql
    coon=pymysql.connect(host='xxx.24.3.40',user='jxz',password='123456',
                         port=3306,db='jxz',charset='utf8',autocommit=True)#连接数据库
    cur=coon.cursor()#建立游标;
    cur.execute('select * from nhy;') #执行sql语句,它只是帮你执行sql语句,不会给你返回数据
    print(cur.fetchall()) #获取结果-查询到的所有结果
    # print(cur.fetchone()) #只获取一条
    # print(cur.fetchmany(2)) #指定获取几条
    cur.close()#关闭游标
    coon.close()#关闭连接
     
    执行insert语句实例:
    sql = 'insert into nhy (name,pwd) value ("htghu","1234567");'
    cur.execute(sql)
    cur.execute('select * from nhy where name="ht"')  #需要执行select语句,才能看到结果
    print(cur.fetchall())
    cur.close()#关闭游标
    coon.close()#关闭连接
     
    定义一个操作数据库函数:
    def my_db(ip,user,passwd,db,sql,port=3306,charset='utf8'):
        noon=pymysql.connect(host=ip,user=user,password=passwd,db=db,
                             port=port,charset=charset,autocommit=True)
        cur=noon.cursor()
        sql=sql.strip()
        cur.execute(sql)
        sql_start=sql[:6].lower()#取sql的开头,转成小写
        if sql_start.startswith('select') or sql_start.startswith('show'):
            data=cur.fetchall()
        else:
            data='ok'
        cur.close()
        noon.close()
        return data
     
    操作redis
    数据库分2类:
    1.传统的关系型数据库
      mysql oracle sql server sqllie db2;
      数据存在磁盘上的;
      使用sql语句来操作数据;
      表与表之间有关系;
    2.非关系型数据库
      mongodb 数据存在磁盘上;
      redis 数据都是存在内存里面;
      存的数据类型都是k-v形式;
    操作redis:
    import redis
    r=redis.Redis(host='xxx.24.3.40',port=6379,password='HK139bc&*',db=10)  #连接redis
    1.操作string类型(k-v)——增删改查:
    r.set('nhy_info','1234567') #增加、修改数据
    print(r.get('nhy_info')) #获取数据,返回的数据是二进制类型
    r.delete('nhy_info')#指定一个key去删除它,key不存在的话也不会报错
    res=r.get('nhy_info')
    print(res.decode()) #将获取到的数据(二进制)转成字符串类型
    print(r.keys('*ingo')) #获取到以info结尾所有的key;什么都不传则获取到所有的key
    print(r.exists('nhy_info'))#判断这个key是否存在
    r.flushdb()#清空当前数据库里所有的key
    r.expire('nhy_info',600) #指定key的失效时间,单位是s;同样适用hash类型
    print(r.ttl('nhy_info')) #用来查看这个key剩余失效时间;同样适用hash类型
    print(r.type('nhy_info'))#查看key的类型;同样适用hash类型
    2.操作hash类型(字典嵌套字典)——增删改查:
    redis的命令行里面select 8 就是切换数据库;
    r.hset('session_crm','liuxinyu','123456')#增加、修改数据
    r.hset('session_crm','zhouyifan','345678')
    r.hdel('session_crm','liuxinyu')#删除指定的小key
    r.hdel('session_crm')#直接删除大key
    print(r.hget('session_crm','zhouyifan'))#获取指定小key里面的数据
    print(r.hgetall('sesssion_crm')) #获取大key里面的所有数据,返回的数据类型是字典,字典的key和value是bytes类型;
    将hash类型里面获取到的数据(bytes)类型变成字符串类型:
    res={ b'k':b'v',b'k2':b'v2'}
    方法一:
    a={}
    for k,v in res.items():
        a[k.decode()]=v.decode()
    print(a)
    方法二:
    for k,v in res.items():
        res[k.decode()] = res.pop(k).decode()#能节省内存,因为他把原来的key删掉了;res.pop(k)返回的是value
        print(res)
     
    md5加密
    1.md5不可逆;
    2.所有一样的字符串,md5之后的结果都是一样的;
    加密:
    import hashlib
    s='123nhy456_fjeiru'
    print(s.encode())#把字符串转成bytes类型
    m=hashlib.md5(s.encode())#加密,必须得传一个bytes类型的
    print(m.hexdigest())#获取到加密后的结果
     
    定义一个加密的函数:
    def myMd5(s):
        s=str(s)
        m=hashlib.md5(s.encode())
        return m.hexdigest()
     
    写excel
    1.要一个单元格一个单元格去写
    写excel:
    import xlwt
    book=xlwt.Workbook()   #创建一个excel
    sheet=book.add_sheet('stu_info')   #加一个sheet
    sheet.write(0,0,'学生编号')    #第一个0代表行,第2个0代表列,'学生编号’是要写入的数据
    sheet.write(0,1,'学生姓名')
    sheet.write(0,2,'成绩')
    sheet.write(1,0,'1')
    sheet.write(1,1,'聂磊')
    sheet.write(1,2,98.87)
    book.save('stu.xls')    #保存,一定要用xls的
  • 相关阅读:
    Java接口的真正意义
    从机械自动化专业转行到Java工程师的学习之路
    程序员必备的17个软件开发工具
    【Java练手项目】Java外卖点餐系统
    Java接口的其他使用语法
    【Java练手项目】Java在线考试系统
    IDEA最新版本中maven配置默认选项
    Java 企业级项目需求文档
    Elasticsearch 搜索数量不能超过10000的解决方案
    Java中TreeSet怎么实现?(详解)
  • 原文地址:https://www.cnblogs.com/you-shu/p/9320757.html
Copyright © 2011-2022 走看看