加密:
1.有解密的加密方式
2.无解密的加密方式:碰撞检查 hashlib
-- 1)不同数据加密后的结果一定不一致
-- 2)相同数据的加密结果一定是一致的
import hashlib # 基本使用 cipher = hashlib.md5('需要加密的数据的二进制形式'.encode('utf-8')) print(cipher.hexdigest()) # 加密结果码 # 加盐 cipher = hashlib.md5() cipher.update('前盐'.encode('utf-8')) cipher.update('需要加密的数据'.encode('utf-8')) cipher.update('后盐'.encode('utf-8')) print(cipher.hexdigest()) # 加密结果码 # 其他算法 cipher = hashlib.sha3_256(b'') print(cipher.hexdigest()) cipher = hashlib.sha3_512(b'') print(cipher.hexdigest())
# 必须加盐 cipher = hmac.new('盐'.encode('utf-8')) cipher.update('数据'.encode('utf-8')) print(cipher.hexdigest())
# my.ini # 注释:该配置文件中,值直接书写,但有四种类型 # -- int float boolean str # section [server] # name:option | value:mysql name = mysql version = 20000 [client] name = owen adress = 192.168.11.174
from configparser import ConfigParser # 初始化配置文件的操作对象 parser = ConfigParser() # 读 parser.read('my.ini', encoding='utf-8') # 大分类:section print(parser.sections()) # 某分类下的keys:option print(parser.options('server')) print(parser.options('client')) # for section in parser.sections(): # print(parser.options(section)) # 获取某section下某option的具体值 # res = parser.get('server', 'version') res = parser.getfloat('server', 'version') print(res, type(res)) # 写 parser.set('server', 'version', '20000') # 写到内存 parser.write(open('my.ini', 'wt'))
import configparser # 初始化配置文件的操作对象 parser = configparser.ConfigParser() # 读 parser.read('my.ini', encoding='utf-8') # 所有section print(parser.sections()) # 某section下所有option print(parser.options('section_name')) # 某section下某option对应的值 print(parser.get('section_name', 'option_name')) # 写 parser.set('section_name', 'option_name', 'value') parser.write(open('my.ini', 'w'))
import subprocess # subprocess.run('dir', shell=True) order = subprocess.Popen('dir1', shell=True, # 存放指令执行成功的信息管道 stdout=subprocess.PIPE, # 存放指令执行失败的信息管道 stderr=subprocess.PIPE ) print(order.stdout) # success_msg = order.stdout.read().decode('GBK') # print(success_msg) # error_msg = order.stderr.read().decode('GBK') # print(error_msg) # 实际项目中,会接着对success_msg加以分析处理 order = subprocess.run('dir', shell=True, # 存放指令执行成功的信息管道 stdout=subprocess.PIPE, # 存放指令执行失败的信息管道 stderr=subprocess.PIPE ) print(order.stdout) # success_msg = order.stdout.decode('GBK') # print(success_msg) # error_msg = order.stderr.decode('GBK') # print(error_msg)
import subprocess order = subprocess.Popen('终端命令', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # order.stdout 流对象,order.stdout.read()来获取操作的信息字符串 suc_res = order.stdout.read().decode('系统默认编码') err_res = order.stderr.read().decode('系统默认编码') # stdout:存放指令执行成功的信息管道 | stderr 存放指令执行失败的信息管道 order = subprocess.run('终端命令', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # order.stdout 是字符串信息,就是Popen下order.stdout.read() suc_res = order.stdout.decode('系统默认编码') err_res = order.stderr.decode('系统默认编码')
年终报表 教学部 市场部 咨询部 总计 Jan-19 10 15 5 30 Feb-19 10 15 5 30 Mar-19 10 15 5 30 Apr-19 10 15 5 30 May-19 10 15 5 30 Jun-19 10 15 5 30 Jul-19 10 15 5 30 Aug-19 10 15 5 30 Sep-19 10 15 5 30 Oct-19 10 15 5 30 Nov-19 10 15 5 30 Dec-19 10 15 5 30 import xlrd # 读取文件 work_book = xlrd.open_workbook("机密数据.xlsx") # 获取所有所有表格名称 print(work_book.sheet_names()) # 选取一个表 sheet = work_book.sheet_by_index(1) # 表格名称 print(sheet.name) # 行数 print(sheet.nrows) # 列数 print(sheet.ncols) # 某行全部 print(sheet.row(6)) # 某列全部 print(sheet.col(6)) # 某行列区间 print(sheet.row_slice(6, start_colx=0, end_colx=4)) # 某列行区间 print(sheet.col_slice(3, start_colx=3, end_colx=6)) # 某行类型 | 值 print(sheet.row_types(6), sheet.row_values(6)) # 单元格 print(sheet.cell(6,0).value) # 取值 print(sheet.cell(6,0).ctype) # 取类型 print(sheet.cell_value(6,0)) # 直接取值 print(sheet.row(6)[0]) # 时间格式转换 print(xlrd.xldate_as_datetime(sheet.cell(6, 0).value, 0))
import xlwt # 创建工作簿 work = xlwt.Workbook() # 创建一个表 sheet = work.add_sheet("员工信息数据") # 创建一个字体对象 font = xlwt.Font() font.name = "Times New Roman" # 字体名称 font.bold = True # 加粗 font.italic = True # 斜体 font.underline = True # 下划线 # 创建一个样式对象 style = xlwt.XFStyle() style.font = font keys = ['Owen', 'Zero', 'Egon', 'Liuxx', 'Yhh'] # 写入标题 for k in keys: sheet.write(0, keys.index(k), k, style) # 写入数据 sheet.write(1, 0, 'cool', style) # 保存至文件 work.save("test.xls")
<?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank updated="yes">5</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank updated="yes">69</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> <neighbor name="Colombia" direction="E"/> </country> </data>
import xml.etree.ElementTree as ET # 读文件 tree = ET.parse("xmltest.xml") # 根节点 root_ele = tree.getroot() # 遍历下一级 for ele in root_ele: print(ele) # 全文搜索指定名的子标签 ele.iter("标签名") # 非全文查找满足条件的第一个子标签 ele.find("标签名") # 非全文查找满足条件的所有子标签 ele.findall("标签名") # 标签名 ele.tag # 标签内容 ele.text # 标签属性 ele.attrib # 修改 ele.tag = "新标签名" ele.text = "新文本" ele.set("属性名", "新属性值") # 删除 sup_ele.remove(sub_ele) # 添加 my_ele=ET.Element('myEle') my_ele.text = 'new_ele' my_ele.attrib = {'name': 'my_ele'} root.append(my_ele) # 重新写入硬盘 tree.write("xmltest.xml")
import json # json.dumps() json.dump() # json.loads() json.loads() # json:json就是一种特殊格式的字符串 # 格式要求: # 1.只能由{}和[]嵌套形成 # 2.只能有一个根: 最外层要么是{}(推荐),要么是[] # 3.所以key都是字符串类型,且json字符串中所有字符串类型必须用""包裹 # 4.json字符串中value类型可以为: number | boolean | null | 字符串 | dic | list dic = {'': [1, 3.14, True, None, "字符串"]} print(json.dumps(dic)) j_str = """{"key": [1, 3.14, true, null, "字符串"]}""" print(json.loads(j_str)) ''' { "info": [1, 2, 3, 4, 5] } ''' # xml格式数据: # 1.xml文件中都是由自定义标签嵌套形成,区分大小写 # 2.只能有一个根标签:其他内容或标签都被该标签包裹 # 3.标签名为key,标签中的值为value # 4.与json不同的是,xml标签可以额外添加属性来标识key的区分度