使用openpyxl来读取数据
1.打开excel
wb = load_workbook(r'111.xlsx', data_only = True)
2.读取数据
使用openpyxl来读取excel数据所使用的内置方法与写入数据相对应。
(1)位置
wb1['A1'] = 'aaa' #写入数据
print(wb1['A1'].value) #读取数据
(2)cell
wb1.cell(row=3, column=2, value='bbb') #写入数据
print(wb1.cell(row=3,column=2).value) #读取数据
(3)整行读取
for j in wb1.columns:
print([i.value for i in j])
# j按顺序读取一行,i从左到右读取j中的数值
使用pandas写入数据
由于openpyxl读写数据比较麻烦,所以可以使用更加简便的pandas模块辅助输入。
pandas模块是用封装好的内置方法使用openpyxl,所以需要安装openpyxl模块为前置模块,否则只安装pandas模块无法运行。
import pandas
d = {
'公司名称': ['老男孩', '老女孩', '老伙计', '老伙子'], #将数据以这样的格式封装成字典
'公司地址': ['上海', '深圳', '杭州', '东京'],
'公司电话': [120, 130, 129, 996],
}
df = pandas.DataFrame(d)
df.to_excel(r'111.xlsx') #将字典输入给表格
pandas模块会用内置方法将数据快捷封装成字典并输入至表格中,本质上是帮我们调用了各种openpyxl的内置方法,节约操作。
random随机数模块
random模块的主要功能就是生成各种不同条件的随机数。
1.random()
生成一个0到1之间的随机数
import random
print(random.random())
2.randint(a,b)
生成一个范围为a到b之间的整数
import random
print(randint(1,6))
3.choice
在列表中随机取出一个数值
import random
print(random.choice['一等奖', '二等奖', '三等奖'])
4.sample
在列表中随机取出数值,抽取数量可自定义
import random
print(random.sample(['1', '2', '3', '4', '5', '6', '7'], 3))
5.shuffle
随机打乱列表的索引值
import random
l1 = [1,2,3,4,5,6,7,8,9]
random.shuffle(l1)
# [3,5,4,9,1,2,8,6,7]
random使用案例
使用random生成一个随机验证码,要求5位字符,只能出现数字,大小写字母
import random
code = ''
for i in range(5):
random_int = str(random.randint(0,9)) #生成一个0-9随机整数
random_big = chr(random.randint(65,90)) #生成一个随机大写字母,由数值转换ASCII码生成
random_small = chr(random.randint(97,122)) #生成一个随机小写字母,由数值转换ASCII码生成
temp = random.choice([random_int,random_big,random_small]) #每次随机一种生成
code += temp
print(code)
hashlib加密模块
加密,就是把看得懂的明文数据转换成看不懂的暗文数据。加密是为了防止信息在输入时遭到泄露,保护隐私。
加密算法有很多,同样内容用不同加密算法出来的结果也不同,但同样内容用同样算法每次加密结果均相同,一般结果越长的加密安全程度越高。
常见加密算法
md5 sha系列 hmac base64
import hashlib
md5 = hashlib.md5() # 选择md5加密算法加密数据
md5.update(b'123') # 往括号内添加明文数据 数据必须是bytes类型
res = md5.hexdigest() # 获取加密之后的结果
print(res)
添加干扰项
加密时可以使用salt作为加密干扰项,减少被解密的可能性。
干扰项不会变成数据的具体内容,仅仅作为加密干扰项出现。
password = input('password>>>:').strip()
md5.update('干扰项内容'.encode('utf8')) #干扰项设置成随机变量会变成动态干扰项,随机性更强
md5.update(password.encode('utf8'))
res = md5.hexdigest()
print(res)
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'))
日志模块
日志,就是程序运行中的记录,用于记录程序运行中产生的信息、bug、错误等等。
日志分类
import logging
logging.debug('debug等级') # 10
logging.info('info等级') # 20
logging.warning('warning等级') # 默认从warning级别开始记录日志 30
logging.error('error等级') # 40
logging.critical('critical等级') # 50
python中默认输出warning等级以上的日志,因为这些会影响到程序的运行。
程序默认运行时会自动添加日志内容并输出日志,括号内也可以自定义输出内容。
日志输出模块
日志在实际输出中不需要配置详细方法,只需要制作一个日志输出的模板,让日志按照模板自动填入数据即可。
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) # 自动加载字典中的配置