1. 程式人生 > >20 常用模塊 hashlib hmac:加密 xml xlrd xlwt:excel讀|寫 configparser subprocess

20 常用模塊 hashlib hmac:加密 xml xlrd xlwt:excel讀|寫 configparser subprocess

表格 所有 config val space 數據 rec star void

hashlib模塊:加密

加密: 
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())

hmac模塊:加密

# 必須加鹽
cipher = hmac.new(.encode(utf-8))
cipher.update(
數據.encode(utf-8)) print(cipher.hexdigest())

和md5()區別 hashlib.md5():
  -- 可以有初始參數,可以沒有初始參數
  -- 可以通過update再添加新內容

hmac.new():
  -- 必須有初始參數
  -- 可以通過update再添加新內容

configparser模塊:操作配置文件

# 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))
ini配置文件操作模塊

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))

subprocess模塊:操作shell命令

技術分享圖片
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)
shell指令操作模塊

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(系統默認編碼)

xlrd模塊:excel讀

            年終報表                
        教學部    市場部    咨詢部    總計
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))

xlwt模塊:excel寫

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模塊

<?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的區分度
xml | json

20 常用模塊 hashlib hmac:加密 xml xlrd xlwt:excel讀|寫 configparser subprocess