学习总结——python的基础5(模块)

先对上周的说的模块进行一些补充:


import os

print(os.path.abspath('.')) # 取绝对路径
print(os.path.abspath('..')) # 取上级路径
print(os.path.abspath('..\\day3'))
# print(os.getcwd())
print(os.listdir('C:\\Users\WANG\\PycharmProjects\\untitled'))
os.chdir('C:\\Users\WANG\\PycharmProjects\\untitled\\day3') # 更改当前工作目录
print(os.getcwd())
################################################################################
res1 = os.system('ipconfig') # 用来执行操作系统命令
# 用来执行操作系统命令,但是只能帮你执行,获取不到他的结果
# print('res的结果:',res1)
res2 = os.popen('ipconfig').read() # 用来执行操作系统的命令
print('res的结果:',res2)

datetime模块
import datetime

print(datetime.date.today()) # 当天的日期,只有日期
print(datetime.datetime.today()) # 当天的时间,有日期有时间

print(datetime.date.today() + datetime.timedelta(days=-10)) # 取十天前的日期,直接输入-10默认对应参数days
res = datetime.datetime.today() + datetime.timedelta(hours=-10,minutes=-20,seconds=-15)
print(res.date()) # 只取到日期
print(res.time()) # 只取到时间
print(res.timestamp()) # 时间戳
print(res.strftime('%Y-%m %H:%M:%S')) # 取到格式化时间

map、filter模块
# 循环帮你调用函数的
import os
import time
def makir(dir_name):
if not os.path.isdir(dir_name):
os.mkdir(dir_name)
return True
dir_names = ['android','ios','tomcat','java','python','php','nginx']

# res = map(makir,dir_names) # 循环帮你调用函数
# res = list(map(makir,dir_names))
# print(res) # 生成器,节省内存
# 1、是不是循环帮你调用函数了
# 2、有没有把函数的返回值拿到
################################################################################
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))
# print(all_data)
# for a in all_data:
# print(a)

# res = [''] # list,用空间换时间
# all_data # 节省空间,增加了cpu的计算时间
nums1 = [str(i).zfill(2) for i in range(10)] # list
nums2 = (str(i).zfill(2) for i in range(10)) # 生成器
# print(nums2)
################################################################################
def my(num):
if num%2==0:
return True
# filter 和 map 的区别
res1 = list(filter(my,range(10))) # 过滤,它把函数处理结果为假的数据给过滤掉了
# 只保留函数返回真的数据
res2 = list(map(my,range(10))) # 不管你返回啥,我都给你拿到
print('res1:',res1,'\nres2:',res2)

random模块
import random

print(random.random()) # 取小于1的随机的小数
print(random.randint(1,10)) # 指定范围,取随机的整数
s = 'abcdef'
print(random.choice(s)) # 随机选择一个,只能选一个
print(random.sample(s,3)) #随机选择N个,返回的是一个list
print(random.uniform(1,10)) # 指定一个范围,随机取一个小数

下面讲一些可能会常用到的一些模块:
例如数据库
首先先来说一说数据库:
# 传统的关系型数据库
# mysql oracle sql server sqllie db2
# id name passwd cratetime sut
# score
# 数据存在磁盘上
# 使用sql语句来操作数据
# 表与表之间有关系
# 非关系型数据库 nosql
# {'name':'xxx',''}
# mongodb 数据存在磁盘上的
# redis 数据都是存在内存里面
先来讲一下mysql数据库:
# 1、连上数据库 IP 账号密码 端口号 数据库
# 2、执行sql
# 3、获取到结果
import pymysql
# 连上数据库
coon = pymysql.connect(host='XXX.XXX.XXX.XXX',
user='XXX',
password='123456',
port=3306,
db='XXX',
charset='utf8',
autocommit=True) # autocommit 自动提交
cur = coon.cursor() # 建立游标
################################################################################
sql1 = 'select * from nhy where name = "wangjian";'
cur.execute(sql1) # 执行sql语句,它只是帮你执行sql语句,不会给你返回数据
print(cur.fetchall()) # 获取结果
print(cur.fetchone()) # 获取一条结果
print(cur.fetchmany(3)) # 指定获取几条
################################################################################
sql2 ='insert into nhy (name,pwd) value ("wangjian","1234567");'
cur.execute(sql2)
coon.commit() # 提交
cur.execute(sql1)
print(cur.fetchall())

cur.close() # 游标关闭
coon.close() # 连接关闭

说完mysql库,再来说一说redis
import redis
# 连接redis
r = redis.Redis(host='XXX.XXX.XXX.XXX',port=6379,password='XXX',db=XXX)

# 增删改查
##################################### 增加&修改数据 ###########################################
r.set('wj_info','age 18 sex man abcdefghi',50) # 增加数据 (Key,value,存在有效时长(秒))
# 获取数据
res = r.get('wj_info')
print(res)
# b'age 18 sex man abcdefghi'
# b代表bytes类型 # 二进制
print(res.decode()) # 编码
###################################### 删除数据 ##########################################
r.delete('wj_info') # 删除指定的key
r.flushdb() # 清空当前数据库里面所有的key
###################################### 查询数据 ##########################################
print(r.keys()) # 获取到所有的key
print(r.keys('*info')) # 以info结尾的key,支持模糊匹配
r.exists('wj_info') # 判断这个key是否存在,返回True、False

#★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
# hash 哈希类型的key
# 哈希类型你理解为一个字典嵌套一个字典

# select 10 redis 命令行里面select 8 就是切换至db8数据库

# 增删改查
##################################### 增加&修改数据 ###########################################
r.hset('sessions_wj','ABC1','123456789abcdefgh')
r.hset('sessions_wj','ABC2','123456789abcdefgh')
r.hset('sessions_wj','ABC3','123456789abcdefgh')
##################################### 删除数据 ###########################################
r.hdel('sessions_wj','ABC2') # 删除指定的小key
r.delete('sessions_wj') # 直接删除大key
##################################### 查询数据 ###########################################
print(r.hget('sessions_wj','ABC3')) # 获取指定小key里的数据
print(r.hgetall('sessions_wj')) # 获取到hash类型里面所有的的数据

r.expire('sessions_wj',600) # 指定失效时间
print(r.ttl('sessions_wj')) # 用来看key的失效时间
print(r.type('sessions_wj')) # 用来看key的类型

知道了如何获取结果,那么我们再说一下
# 把 {b'kate': b'lq'}  转换成 {'kate': 'lq'}

# res = r.hgetall('sessions_wj')
# print(res)
# 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删掉了
# # 把原来的bytes类型的key删掉,这样子的话,res里面就没有多余的bytes类型的数据了
# print(res)

说完了数据库,那么我们顺便了解一下如何对数据进行加密————这里介绍一下MD5加密
# md5不可逆
# 所有一样的字符串,md5之后的结果都是一样的
这里直接将md5加密封装成一个简单的函数:
# md5加密封装函数
def myMd5(s):
s = str(s)
m = hashlib.md5(s.encode()) # 必须得传一个bytes类型的
print(m.hexdigest()) # 获取到加密后的结果
return m.hexdigest()

查询完数据库后,如何把数据导出来呢?接下来介绍一下如何操作excel~
import xlwt

book = xlwt.Workbook() # 创建excel
sheet = 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,'88.5')
book.save('stu.xls') # 一定要用xls的

写完excel那么如何写日志呢?
import nnlog

my_log = nnlog.Logger('a.log',when='S',backCount=5) # when参数表示可以写D-天,S-秒..为单位;backCount参数表示最多保存几个日志文件
# debug、info、warning、error
# my_log.debug('这是debug级别')
# my_log.info('info级别的')
# my_log.warning('warning级别的')
# my_log.error('error级别的')
nnlog.Logger.words = '哈哈哈哈哈'

那么如何把这个excel文件以邮件方式发给别人呢?
import yagmail
# 账号 密码 邮箱服务器 收件人 抄送 主题 正文 附件
username = '[email protected]'
passwd = 'XXXXXXXXXXXXX'
mail = yagmail.SMTP(user=username,password=passwd,host='smtp.163.com') # 安全协议,smtp_ssl=Ture 如果是qq邮箱,需要加这个参数
# 连接上邮箱了
mail.send(to = ['[email protected]'],
cc = ['[email protected]'],
subject='哈哈哈哈哈哈哈哈哈',# 邮件主题
contents='哈哈哈哈哈哈哈哈哈',# 邮件内容
attachments=r'‪C:\Users\WANG\Desktop\stu.xls' # 邮件附件
)
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/Printwj/p/9295978.html