1       函数map和filter

#map()filter循环帮你调用函数的

1.1     函数map


import os

import time

def makdir(dir_name):
    if not os.path.isdir(dir_name):
        os.mkdir(dir_name)
        return Truedir_names = ['android','ios','java','tomcat','python','php']

res = map(makdir,dir_names)    #循环帮你调用函数
res1= list(map(makdir,dir_names))
print(res)      #返回的是一个生成器
print(res1)     #返回一个list
def timestampToStr(timestamp=None,format='%Y%m%d'):
    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)]
print(all_data)  #这个就是获取到的是一个list
all_data1 = (timestampToStr(int(time.time())-86400*i) for i in range(10))
print(all_data1)    #使用小括号获取的是一个生成器
for a in all_data1:     #循环该生成器也可以获取到对应的数据     print(a)

#生成器 # 生成器为了节省内存的,每次循环的时候,按照这个规则(你写的逻辑)去生成一个数据,但增加了cpu的计算时间 #
#
生成器示例
nums = (str(i).zfill(2) for i in range(10))
print(nums)
for n in nums:
    print(n)

range(10)       #range函数其实也是一个生成器,在循环的才能获取到对应的数据
for i in range:
    print(range)

 

1.2     函数filter

#filter作用是过滤,把函数处理结果为假的数据给过滤掉,只保留函数返回真的数据

def my(num):
    if num%2==0:
        return Trueres = list(filter(my,range(10)))
res2 = list(map(my,range(10)))
print('res',res)        #filter作用是过滤,把函数处理结果为假的数据给过滤掉,只保留函数返回真的数据
print('res2',res2)      #map的作用是不管你返回啥,都给获取到

 

 

2       os模块

2.1     获取绝对路径

import os
print(os.path.abspath('..\\day5')) #取绝对路径
print(os.getcwd())  #取当前路径 #.代表当前目录,..代表上一级目录
print(os.listdir('D:\\pythonscript\\day5'))
os.chdir('D:\\pythonscript\\day6')      #更改当前工作目录
print(os.getcwd())

2.2     system()

用来执行操作系统命令,但是只能帮你执行,获取不到命令执行的结果

res = os.system('dir') #用来执行操作系统命令,但是只能帮你执行,获取不到命令执行的结果
print('res',res)        #如果返回结果是0,表示命令执行成功,返回1表示执行失败


2.3     popen()

也是用来执行操作系统命令,但是它可以获取到命令执行的结果
res = os.popen('dir').read()    #后面添加个read方法就可以获取到命令执行的结果
print('popen',res)

此方法只能获取静态的数据,如linux下的要想获取top这个实时动态的数据则无法获取到,要想获取到则通过使用top –n 1来实现获取一次top的数据即可。

 

3       datetime

import datetime
print(datetime.date.today())        #获取到当天的日期(年月日)
print(datetime.datetime.today())    #获取到当前的时间(年月日及具体时间)

t1 = datetime.date.today() + datetime.timedelta(-1)  #获取昨天的数据
t2 = datetime.date.today() + datetime.timedelta(days=1)   #获取明天的数据,days=可以不加
print(t1,t2)

t3 = datetime.datetime.today() + datetime.timedelta(days=1,hours=10,minutes =20,seconds=5) #当前的时间往前或往后推多长时间
print(t3)
print(t3.time()) #只取到时间
print(t3.date())    #只取到日期
print(t3.timestamp())   #取到时间戳
print(t3.strftime('%Y-%m-%d'))  #取到格式化时间

 

4       random

import random
print(random.random())      #取小于1的随机的小数
print(random.randint(1,10))     #指定范围,取随机的整数,如范围取1-10之间的整数,顾头也顾尾
s = 'abcd'print(random.choice(s))      #随机选择一个,只能选择一个,可以是字符串,list、字典、集合、元组等
print(random.sample(s,3))   #随机选择N个,返回的是一个list,如3表示随机选择3个,随机选择的不会重复
print(random.uniform(1,10))     #指定一个范围,然后取一个随机小数

 

5       写日志

import nnlog
my_log = nnlog.Logger('test1.log',when='S',backCount=5) #when是按天生成文件,将D修改为S则按秒生成文件,backCount备份文件最多只备份5 #日志级别 #debug,级别最低,打印的信息最详细 #info
#warning
#error
my_log.debug('debug级别')
my_log.info('info级别')
my_log.warning('warning级别')
my_log.error('error级别')

 

6       发邮件

import yagmail
#账号密码,邮箱服务器,收件人,抄送人,主题,内容,附件
username = 'aaaa@126.com'passwd = 'bbbb'           #此处需要使用邮箱的授权码,授权码需要在邮件中进行设置 #smtp_ssl=True   安全协议,如果是QQ邮箱需要加上这个参数,网易邮箱可以不加
mail = yagmail.SMTP(user=username,password=passwd,host='smtp.126.com')         #连上邮箱
mail.send(to=['aaa@qq.com','bbb@qq.com'],      #发送邮件如果是有多个收件人则直接用list即可           cc='ccc@163.com',
          subject='发送带附件邮件测试',
          contents='邮件发送成功',
          attachments=r'D:\pythonscript\day6\发邮件.py')    #多个附件写个list即可,如果邮件附件中文乱码的话重新安装一下牛牛修改的whlyagmail包,不是乱码的不用管

7       操作数据库

7.1     Mysql数据库

#连上数据库ip 账号密码,端口号,数据库,执行sql,获取到结果
import pymysql
conn = pymysql.connect(host='1.1.1.1',user='jxz',password='123456',port=3306,db='jxz',charset='utf8',autocommit=True)      #连接数据库
cur = conn.cursor() #建立游标 # cur.execute('select * from nhy;')     #执行sql语句,只是执行sql语句,不会返回数据
sql = 'insert into nhy (name,pwd) value ("zhangsan","123456");'cur.execute(sql)
# conn.commit()       #执行insertupdatedelete语句时需要提交一下才能插入到数据库中去,否则数据库中没有写入进去,在连接数据库上添加autocommit=True参数可以自动提交,此行就不需要了
cur.execute('select * from nhy where name="zhangsan";')

print(cur.fetchall())       #获取数据库执行的所有结果,获取的结果是一个二维的元组
print(cur.fetchone())       #只获取一条结果
print(cur.fetchmany(2))     #指定获取几条结果 #如果上面三条都执行,则只有第一条获取到,第二、三条则获取不到东西了,游标类似于文件指针
cur.close()     #游标关闭
conn.close()    #连接关闭

 

操作数据库封装为一个函数

def my_db(ip,user,passwd,db,sql,port=3306,charset='utf8'):
    conn = pymysql.connect(host=ip,user=user,
                    password=passwd,db=db,
                    port=port,charset=charset,autocommit=True)
    cur = conn.cursor()
    sql=sql.strip()
    cur.execute(sql)
    sqlstart = sql[:6].lower()      #sql的开头6位,转换为小写     if sqlstart.startswith('select') or sqlstart.startswith('show'):    #判断是selecshow的语句获取对应结果         data = cur.fetchall()
    else:                   #else是为了下面的return不报错         data = 'ok'
   
cur.close()
    conn.close()
    return data

 

7.2     redis数据库

#传统的关系型数据库(mysql\oracle\sql server\sqlite\db2     #数据存在磁盘上,使用sql语句来操作数据,表与表之间有关系
#
非关系型数据库(nosql)mongodb\redis     #数据存储是key-value键值对的形式;     #mogodb数据存在磁盘上的     #redis数据都是存在内存里面
import redis
r = redis.Redis(host='1.1.1.1',port=6379,password='123456',db=10)    #连接redis
#
增删改查
r.set('jxz_info','name zhangsan age 18 sex nan',50)       #增加数据,第三个参数50是设置过期失效时间,单位是秒
res = r.get('jxz_info')       #查询数据,获取到的数据前面有个b,表示是bytes二进制数据
print(res)          #get一个不到的key,不会报错,返回的是None,返回None的话则不能再使用decode()进行编码转换,否则报错
print(res.decode())     #编码,将二进制转换成字符串
r.delete('aaaa_info')       #指定一个key删除,删除一个不存在的key不会报错
print(r.keys())   #获取到所有的keyprint(r.keys('*info'))      #获取以info结尾的key
print(r.exists('jxz_info'))     #判断这个key是否存在
print(r.flushdb())      #清空当前数据库里面所有的key

 

在redis客户端软件上直接执行非关系型数据操作方法:

 

如何查询python标准库和函数库_如何查询python标准库和函数库

#hash类型的key增删改查,哈希类型理解为字典嵌套一个字典
r.hset('session_jxz','aaa','123456')    #增加一个hash类型的key,第一个是外面的key,第二个是里面的key,第三个是valuer.hset('session_jxz','bbb','000000')
#修改也是hset
r.hdel('session_jxz','bbb')     #删除指定的小keyr.hdel('session_jxz')           #直接删除大key


r.hget('session_jxz','aaa')     #查询指定小key里的数据

r.hgetall('session_jxz')        #查询指定大key下的所有数据

 

dic={}
res = r.hgetall('session_jxz')
#hash key中获取的数据从bytes类型转换为字符串类型 #方法一:
for k,v in res.items():
    dic[k.decode()] = v.decode()        #把获取到的keyvaluebyte类型转换为字符串类型;
print(dic)

#方法二:
for k,v in res.items():
    res[k.decode] = res.pop(k).decode()     #能节省内存,因为它把原来的key删掉了
print(res)


r.expire('session_jxz',60)      #指定key的失效时间
print(r.ttl('session_jxz'))

print(r.type('session_jxz'))    #查看key的类型

8       加密模块

import hashlib
s = '123456'm = hashlib.md5(s.encode())         #字符串转换成bytes类型使用encode()方法即可,要将字符串加密,必须传一个bytes类型的数据
print(m.hexdigest())        #获取到md5加密的结果,md5算法加密是不可逆的
#
所有一样的字符串,md5之后的结果都是一样的 #撞库,网上的md5在线解密是用撞库来实现的,是优先将字符串加密的数据与加密前的值放到一个数据库中,在线查询是直接到数据库中去查询
n = hashlib.sha224(s.encode())
print(n.hexdigest())

def mymd5(s):
    str(s)
    m = hashlib.md5(s.encode()) 
    print(m.hexdigest()) 
    return m

 

9       写excel

import xlwt
book = xlwt.Workbook()      #创建excelsheet = book.add_sheet('stu_info')      #加一个sheet
sheet.write(0,0,'学生编号')    #指定行列,第一个表示行,第二个表示列
sheet.write(0,1,'学生姓名')
sheet.write(0,2,'学生成绩')
sheet.write(1,0,'1')
sheet.write(1,1,'张三')
sheet.write(1,2,'98')

book.save('stu.xls')    #一定要用xls保存