• 目录

    • 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. ASP.NET Core + SaasKit + PostgreSQL + Citus 的多租户应用程序架构示例

    在 确定分布策略 中, 我们讨论了在多租户用例中使用 Citus 所需的与框架无关的数据库更改. 当前部分研究如何构建与 Citus 存储后端一起使用的多租户 ASP.NET 应用程序. http:/ ...

  2. python 动态规划(背包问题和最长公共子串)

    背包问题 现在要往一个可以装4个单位重量的背包里怎么装价值最高:A重量1个单位,价值15:B重量3个单位,价值20:C重量4个重量,价值30 使用动态规划填充空格 class SolutionBag: ...

  3. 移动应用开发迎来哪些新技术?5月24日相约HDD·线上沙龙·创新开发专场

    HUAWEI Developer Day(简称HDD),是华为开发者联盟与广大开发者深度交流的平台.围绕移动终端的最新技术和产品形态,持续向广大开发者传递华为终端的最新产品和开放服务能力,结合最新的行 ...

  4. 网络:Tor

    洋葱路由催生了暗网的产生 1995年,美国海军研究实验室的科学家开始开发一套匿名系统,可以避免人们在互联网上的行迹被追 踪到.由于在该系统中,数据被层层密码保护,这个技术被称为叫作"洋葱路由 ...

  5. 素性测试+PollardRho

    素数判定 暴力 本质上是检查其是否能够不用其本身进行质因数分解. 直接枚举从区间 \([2,n)\) 的数看其是否整除 \(n\) 即可.但是其实发现我们只要枚举到 \(\sqrt n\) 即可,复杂 ...

  6. 【Java面试】什么是可重入,什么是可重入锁? 它用来解决什么问题?

    一个工作了3年的粉丝,去一个互联网公司面试,结果被面试官怼了. 面试官说:"这么简单的问题你都不知道? 没法聊了,回去等通知吧". 这个问题是: "什么是可重入锁,以及它 ...

  7. CentOS8设置国内镜像源(阿里云镜像)

    CentOS8设置国内镜像源(阿里云) 1.备份原有配置 [root@localhost ~]# mkdir /etc/yum.repos.d.bak [root@localhost ~]# mv / ...

  8. 迄今微软不同时期发布的SQL Server各版本之间的大致区别,供参考查阅

    通过在互联网上收集及微软官方网站等途径获取相关资料进行整理汇总出Microsoft SQL Server各个版本(SQL Server 2008 R2.SQL Server 2012.SQL Serv ...

  9. dubbo的消费者是怎么获取提供者服务接口引用的?

    本文主要解读dubbo消费者是如何引用服务端接口的,是如何像本地调用一样调用远程服务的. 并试着从设计者的角度思考,为何这样设计. @Component public class DubboConsu ...

  10. Javaweb-在idea中配置Tomcat

    解决警告问题 为什么会有这个问题:我们访问一个网站,需要制定一个文件夹名字 最后点OK,Tomcat就亮起来了 运行成功弹出界面: