• 目录

    • openpyxl模块

    • random随机模块

    • hashlib加密模块

    • subprocess模块

    • logging模块

  • openpyxl模块

   1.读取:openpyxl不擅长读数据 所以有一些模块优化了读取的方式-pandas模块
from openpyxl import Workbook
wb = Workbook()
wb.save(r'红牛公司信息统计表.xlsx') wb1 = wb.create_sheet('信息统计表', 0)
wb1.append(['公司名称', '公司地址', '公司邮箱', '公司电话'])
wb.save(r'红牛公司信息统计表.xlsx') from openpyxl import load_workbook
wb = load_workbook(r'红牛公司信息统计表.xlsx', data_only=True)
print(wb.sheetnames) # 查看所有工作簿
print(wb1.max_row) # 有数据最大行 1
print(wb1.max_column) # 有数据最大列 4
print(wb1['A1'].value) # 获取A1的数据 公司名称
print(wb1.cell(row=1, column=2).value) # 另一种取值方式 公司地址
for i in wb1.rows:
print([j.value for j in i]) # ['公司名称', '公司地址', '公司邮箱', '公司电话'] for j in wb1.columns:
print([i.value for i in j])
   2.pandas模块(基于openpyxl模块):对excel表格操作更方便
import requests,pandas

# 读取页面数据
with open(r'hn.html', 'r', encoding='utf8') as f:
data = f.read()
# 研究目标数据的特征 编写正则筛选# 1.获取所有的分公司名称
company_name_list = re.findall('<h2>(.*?)</h2>', data)
# print(res)# 2.获取所有的分公司地址
company_addr_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
# print(company_addr_list)# 3.获取所有的分公司邮箱
company_email_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
# print(company_email_list)# 4.获取所有的分公司电话
company_phone_list = re.findall("<p class='telIco'>(.*?)</p>", data)
print(company_phone_list)
d = {'公司名称': company_name_list,
'公司地址': company_addr_list,
'公司邮箱': company_email_list,
'公司电话': company_phone_list
} df = pandas.DataFrame(d)
df.to_excel(r'111.xlsx')
  • random随机模块:有趣并好玩的模块

   1.random函数:随机获取0-1之间的浮点数
import random
res = random.random()
print(res) # 0.25971756085753495
   2.choice函数:随机获取数据中值
import random
l1 = [1, 3, 5, 6]
res = random.choice(l1) # l1中的随机数
print(res)
   3.unifore函数:需要a,b两个参数,返回的值是a-b范围内随机的浮点型
import random
print(random.uniform(1.9)) # 8.94712302571186
   4.randint函数:需要a,b两个参数,返回的值是a-b范围内随机的整数
import random
print(random.randint(1, 9)) # 3
# 获取随机验证码
def indent_code(n):
# 1.定义存储验证码
code = ''
# 3.循环打印验证码个数
for i in range(n):
num1 = random.randint(0, 9)
num2 = chr(random.randint(65, 90))
num3 = chr(random.randint(97, 122))
num = random.choice([num1, num2, num3])
num = str(num)
# 4.数据整合
code += num
return code
print(indent_code(3))
print(indent_code(5))
   5.sample函数:从数据中获取规定数量的随机数
import random
count = 1
while count < 4:
gift = ['', '', '', '']
luck = random.sample(gift, 1) # sample(数据,个数) 从数据中获取规定数量的随机数
count += 1
print(f'哈哈哈哈你被幸运{luck}砸中啦')
   6.randrange函数:三个参数 ,a=开始数据 b=结束数据 c=间距
import random
print(random.randrange(1, 9, 2))
   7.shuffle函数:打乱原有数据顺序(洗一洗)
import random
l1 = [1, 3, 5, 6]
random.shuffle(l1) # shuffle(数据)
print(l1)
  • hashlib加密模块

   1.加密定义:将明文(看的懂)通过代码操作转变成密文(看不懂),加密没有绝对的安全,只有更安全。
   2.加密的作用:防止重要数据泄露
   3.加密方法:md5 sha系列 hmac base64

    3.1 md5方法 :不可逆加密

    3.1.1 解密方法:通过大量计算,得出很多密文,然后匹配密文

import hashlib

md5 = hashlib.md5()
md5.update(b'123')
print(md5.hexdigest()) # 202cb962ac59075b964b07152d234b70

    3.2 只要明文数据一致,用相同的加密方法得出的密文一致

import hashlib

md5 = hashlib.md5()
md5.update(b'123abc987')
print(md5.hexdigest()) # 59ce83185eaea0ef841540ed77d11bd6 md5 = hashlib.md5()
md5.update(b'123')
md5.update(b'abc')
md5.update(b'987')
print(md5.hexdigest()) # 59ce83185eaea0ef841540ed77d11bd6

    3.3 加盐(加点盐迷惑一下)   

import hashlib
md5 = hashlib.md5()
password = input('password>>>:').strip()
md5.update('设置的盐(干扰项)'.encode('utf8'))
md5.update(password.encode('utf8'))
res = md5.hexdigest()
print(res) # 30faf565ac9a30b1bb672691776f1185

    3.4 动态加盐(salt):每次干扰项不一致

    3.5 加密实际应用场景

     3.5.1.用户密码加密

      注册存储密文 登录也是比对密文

     3.5.2.文件安全性校验

      正规的软件程序写完之后做一个内容的加密

      网址提供软件文件记忆该文件内容对应的密文

      用户下载完成后不直接运行 而是对下载的内容做加密

      然后比对两次密文是否一致 如果一致表示文件没有被改

      不一致则表示改程序有可能被植入病毒

     3.5.3.大文件加密优化(查看文件大小os.path.getsize)

      程序文件100G

      一般情况下读取100G内容然后全部加密 太慢

      不对100G所有的内容加密 而是截取一部分加密

      eg:每隔500M读取30bytes

  • subprocess模块:模拟计算机cmd模块

import subprocess

cmd = input('请输入您的指令>>>:').strip()
sub = subprocess.Popen(cmd,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
# stdout执行命令之后正确的返回结果
print(sub.stdout.read().decode('gbk'))
# stderr执行命令报错之后的返回结果
print(sub.stderr.read().decode('gbk'))
  • logging日志模块

   1.定义:记录软件运行所发生事件的方法
   2.作用:记录事情发生的事实,方便查找事实真相
   3.等级:

    import logging

    logging.debug('debug等级') # 10

    logging.info('info等级') # 20

    logging.warning('warning等级')       # 默认从warning级别开始记录日志 30

    logging.error('error等级') # 40

    logging.critical('critical等级') # 50

   4.基本使用方法

import logging

file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',)
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
handlers=[file_handler,],
level=logging.ERROR
)

logging.error('我很好!!!')            

   5.组成部分

    5.1 logger:提供记录日志的方法

      logger = logging.getLogger('使用记录')

    5.2 filter:日志的过滤,可忽视

    5.3 handler:选择日志的输出地方(一个logger添加多个handler)

hd1 = logging.FileHandler('a1.log', encoding='utf-8')  # 输出到文件中
hd2 = logging.FileHandler('a2.log', encoding='utf-8') # 输出到文件中
hd3 = logging.StreamHandler() # 输出到终端

    5.4 format:日志的包装(用户格式化输出日志的信息)

fm1 = logging.Formatter(
fmt='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
)
fm2 = logging.Formatter(
fmt='%(asctime)s - %(name)s: %(message)s',
datefmt='%Y-%m-%d',
)

    5.5 给logger对象绑定handler对象

      logger.addHandler(hd1)

      logger.addHandler(hd2)

      logger.addHandler(hd3)

    5.6 给handler绑定formmate对象

      hd1.setFormatter(fm1)

      hd2.setFormatter(fm2)

      hd3.setFormatter(fm1)

    5.7 设置日志等级

      logger.setLevel(10)  # debug

    5.8 记录日志

      logger.debug('哈哈哈哈')

   6.日志配置字典
import logging
import logging.config
# 定义日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' # 自定义文件路径
logfile_path = 'a3.log'
# log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {}, # 过滤日志
'handlers': {
#打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 1024*1024*5, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
#logging.getLogger(__name__)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
}, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
# '购物车记录': {
# 'handlers': ['default','console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
# 'level': 'WARNING',
# 'propagate': True, # 向上(更高level的logger)传递
# }, # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
},
}
logging.config.dictConfig(LOGGING_DIC) # 自动加载字典中的配置
logger1 = logging.getLogger('购物车记录')
logger1.warning('尊敬的VIP客户 晚上好 您又来啦')
logger1 = logging.getLogger('注册记录')
logger1.debug('jason注册成功')
logger1 = logging.getLogger('顾客消费记录')
logger1.debug('哈哈哈哈')

python第三方模块与内置模块的更多相关文章

  1. python第三方模块精选

    python不但有着强大丰富的“内置电池”,同样的,第三方模块也是非常的多.目前收集了requests.paramiko.pymsql,以后会陆续添加: 一.requests Python标准库中提供 ...

  2. python第三方模块的导入

    模块搜索路径 当我们尝试加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错: >>> import module1 Traceback (most ...

  3. Python第三方模块--requests简单使用

    1.requests简介 requests是什么?python语言编写的,基于urllib的第三方模块 与urllib有什么关系?urllib是python的内置模块,比urllib更加简洁和方便使用 ...

  4. Linux 下 安装Python第三方模块工具箱pip,以及用pip安装的方法

    下载文件 wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 执行安装 python get-pip.py 可以做一个软连 ...

  5. psutil——获取系统信息的Python第三方模块

    本文摘自廖雪峰大神个人网站:https://www.liaoxuefeng.com/wiki/1016959663602400/1183565811281984 用Python来编写脚本简化日常的运维 ...

  6. 安装python第三方模块

    下载 第三方模块的下载地址:https://pypi.python.org/pypi 其他版本的第三方模块下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs ...

  7. python第三方模块详细教程(紧急情况宝典)

    目录 一:第三方模块 第三方模块:并不是python自带的 需要基于网络下载! 使用下载第三方模块 需要将python pip添加到环境变量 1.验证pip路径添加成功 2.pycharm添加第三方模 ...

  8. Python~第三方模块

    第三方库还有MySQL的驱动:MySQL-python,用于科学计算的NumPy库:numpy,用于生成文本的模板工具Jinja2 模块搜索路径 Windows下: 双\\   sys.path.ap ...

  9. python 第三方模块 转 https://github.com/masterpy/zwpy_lst

    Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单易用. Prettytable,主要用于在终端或浏览器端构建格式化的输 ...

随机推荐

  1. Spring 源码(14)Spring Bean 的创建过程(5)

    到目前为止,我们知道Spring创建Bean对象有5中方法,分别是: 使用FactoryBean的getObject方法创建 使用BeanPostProcessor的子接口InstantiationA ...

  2. 解决 js aysnc await try-catch 地狱

  3. spring-boot rest controller 使用枚举作为参数,重写反序列化实现任意值转枚举类型

    目录 BaseEnum MyEnum StringToEnumConverterFactory FormatterConfig DTO RestController 参考 BaseEnum packa ...

  4. 使用 AgileConfig 动态配置 NLog

    NLog 是我们在 .NET 领域使用非常广泛的日志组件.它默认使用 xml 来维护它的配置.最近有几个同学问我当使用 AgileConfig 的时候如何配置 NLog .因为 AgileConfig ...

  5. Java线程同步操作

    synchronized 作用于对象实例:对给定对象加锁,进入同步代码前要获得给定对象的锁. 作用于实例方法:相当于对当前实例加锁,进入同步代码前要获得当前实例的锁. 作用于静态方法:相当于对当前类加 ...

  6. CentOS下安装与配置Maven

    安装Maven 当前系统 [root@141 ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 下载 http://ma ...

  7. 李呈祥:bilibili在湖仓一体查询加速上的实践与探索

    导读: 本文主要介绍哔哩哔哩在数据湖与数据仓库一体架构下,探索查询加速以及索引增强的一些实践.主要内容包括: 什么是湖仓一体架构 哔哩哔哩目前的湖仓一体架构 湖仓一体架构下,数据的排序组织优化 湖仓一 ...

  8. JS:对象调方法1

    找调用者 1.如果有this,就先看this在哪个函数中,就是离this最近的function,没有就是window 2.找到函数后,辨别哪个是调用者 例1: 点击查看代码 function fn() ...

  9. VR技术赋能五大领域,不止高级,更高效!

    除了VR游戏.VR影视作品,究竟还有哪些产业领域会应用到VR技术并为生活带来改变呢?今天就帮大家好好梳理一下~ VR赋能交通,不只是高级 最近在网上看到了VR考驾照的新闻,网友都赞叹,现在学车都这么高 ...

  10. idea运行Tomcat出现 Address localhost:8080 is already in useAddress localhost:8080 is already in use

    使用IDEA运行 tomcat时出现 Address localhost:8080 is already in use,就很奇怪,我明明只有这一个程序呀,怎么还会被占用.后来想想可能就是被其他进程占用 ...