8.hashlib暗号化モジュール
主に暗号化とチェックサムのために使用さ
一般的な暗号文:MD5、SHA1、SHA256、SHA512
- 同じに暗号文、平文限り同じ
- 彼らは限り平文は、暗号文が同じではないのと同じではありません
- 逆の(暗号化解除することはできません)なし - MD5中国が割れ
最も一般的に使用される暗号化通常SHA1を使用し、(検証用)MD5です
'''加密
1.指定要加密的方式
2.将要加密的内容转成字节
3.合成
'''
import hashlib
md5 = hashlib.md5()#1
md5 = hashlib.sha1()
md5 = hashlib.sha256()
md5 = hashlib.sha512()
md5.update("alex123".encode("utf-8"))#2 密文与编码方式无关,只与加密方式和明文有关
print(md5.hexdigest())#3
塩:
#1.固定加盐
import hashlib
pwd = "wang123"
md5 = hashlib.md5("我去".encode("utf-8"))
md5 = hashlib.md5(b"alex07yu")
md5.update(pwd.encode("utf-8"))
print(md5.hexdigest())
#2.动态加盐
user = input("username:")
pwd = input("passwd:")
md5 = hashlib.md5(user.encode("utf-8"))
md5.update(pwd.encode("utf-8"))
print(md5.hexigest())
#3.读取文件内容加密
f = open(r"F:\s24\day17\python-3.6.6-amd64.exe",'rb')
md5 = hashlib.md5()
md5.update(f.read())
print(md5.hexdigest())
#4.逐步加密和一次加密结果一样
import hashlib
pwd1 = 'a'
pwd2 = 'b'
pwd3 = 'ab'
md5 = hashlib.md5()
md5.update(pwd1.encode("utf-8"))
md5.update(pwd2.encode("utf-8"))
print(md5.hexdigest())
md6 = hashlib.md5()
md6.update(pwd3.encode("utf-8"))
#5.接3,当文件太大时,逐步加密,节省内存
import hashlib
f = open(f"F:\s24\day17\python-3.6.6-amd64.exe",'rb')
md5 = hashlib.md5()
while 1:
msg = f.read(1024)#每次读取1024字节
if msg:
md5.update(msg)
else:
print(md5.hexdigest())
break
9.collections
- namedtuple:名前付きタプル。要素のタプルのコンテンツにアクセスするために使用することができ、生成の名前
- 両端キュー:両端キューはすぐに他の側に付加してオブジェクトを削除することができます
- カウンター:反復要素の数を計算するためのカウンタ
- defaultdict:デフォルト値で辞書
- OrdereDict
from collections import namedtuple
#1.
point = namedtuple('a',['x','y'])
p = point(1,2)
print(p)
#2.
from collections import deque
lst1 = depue([1,2,3,4,5])
lst1.append(8)
lst1.appendleft(0)
lst1.pop()
lst1.popleft()
print(lst1[4])
#3.***
from collections import Counter
s1 = '13215af13213a1dfa3sdfa3'
print(dict(Count(s1)))
s2 = [1,1,2,2,3,3]
print(dict(Count(s2)))
s3 = (1,2,3,3,4,5,6,7,78)
print(dict(Count(s3)))
#4.
from collections import defaultdict
dic = defaultdict(list)
dic['k1'].append(1)
print(dic)
#结果:defaultdict(<class 'list'>, {'k1': [1]})
'''
将列表中大于66的放到k1中,其余的放到k2中,用带有默认值的字典模块做
'''
li = [11,22,33,44,55,77,88,99,90]
from collections import defaultdict
dic = defaultdict(set)
for i in li:
if i > 60:
dic['k1'].add(i)
else:
dic['k2'].add(i)
print(dic)
#5.了解
10.reモジュール
定期:それは一緒に特別な意味や方法を説明した文字列(正規表現と呼ばれる)を持っている一部の記号を組み合わせたものです。定期的なルールは、物事のクラスを記述するために使用されます
メタキャラクタ | マッチングルール |
---|---|
\ワット | マッチ(中国を含む)の文字、または数字、またはアンダースコア |
\ W | (中国語を含む)の文字に一致することに加えて、数字、または下線 |
\ sの | 空白にマッチします |
\ S | 任意の非空白文字にマッチします |
\ dは | [0-9]と同等のマッチ番号、 |
\ D | 非数値のマッチング |
\ A | 文字列一致の先頭から |
\ Z | それはラインのためであれば、前のラップの唯一のマッチング結果は、文字列の末尾にマッチします |
\ nは | 改行にマッチします |
\トン | マッチングタブ |
^ | 文字列の先頭にマッチします |
$ | 文字列の末尾 |
。 | 改行以外の任意の文字に一致し、re.DOTALLフラグが指定されている場合、改行を含む任意の文字に一致します |
[] | 文字セットの文字をマッチング、[abc]は、A、B、Cを表しています。[AZ] zは単一の文字を表し「 - 」試合の開始前に置かれたとき、一致しない - > [-az] |
[^] | 一致文字セット文字に加えてすべての文字、[^ abc]は、単一の文字または非BまたはCを表します |
* | 前の文字0回または拡張子の無制限の数、ABC *はabccc、AB、ABC、ABCCを表し...... |
+ | 1つ前の文字または無制限の拡大、 |
? | 前の文字がゼロまたは1時間延長 |
{N} | フロント拡張文字n回、AB {2} CはABBCを表します |
{M、N} | マッチ拡張前に文字が貪欲マッチング、n倍で、n回mに拡張しました |
| | 左または右の発現は、| bがaまたはbにマッチします |
() | DEF ABC又はを表し、|(DEF ABC)、|括弧内の式と一致する、グループ利用可能な、ブラケットを表します。M(?:) Tブラケット内外共に出力 |
1.メソッド
re.search())(正規表現の最初の位置に一致するように検索文字列では、数学オブジェクトを返し、.groupオブジェクトを表示します。
文字列と一致する正規表現の開始位置から、オブジェクトの一致を返します。re.match()
マッチオブジェクトは、リターンなしと一致しません
import re
#search找到第一个就停止查找
print(re.search(r'[1-9]\d{3}','100086'))
print(re.search(r'[1-9]\d{3}','00086001500012').group())
#match只从开头找,开头不符合就不查找了
print(re.search(r'[1-9]\d{3}','100086'))
print(re.match(r'[1-9]\d{3}','00086002154'))
- re.findall():検索文字列、一致する部分文字列の他のすべてのタイプのリストを返します
- re.split():正規表現に一致する文字列を分割した結果によると、のリストを返します
- re.sub():文字列が返さ代替を文字列にサブストリングに一致するすべての正規表現に置き換えます
import re
#分割
s = 'aa#所谓结案,2123:lkj!无*所谓'
print(re.split("[#,:!*]",s))
#替换
print(re.sub("所谓","me",s))
- re.finditer():イテレータアドレスを返します
import re
f = re.finditer("\w","你是垃圾")
print(next(f).group())
for i in f:
print(i)
2.re 2同等の方法:
- 機能使用方法:1回の操作
- オブジェクト指向の使用法:この操作はコンパイルすることができ、re.compile() - >ルールに一致する定義
import
#1.函数式用法:
rst = re.search(r'[1-9]\d{5}','BIT 100086')
print(rst.group())
#2.面向对象:
pat = re.compile(r'[1-9]\d{5}')
rst = pst.serch('BIT 100086')
3.貪欲マッチングと正規最小マッチング(一致デフォルト貪欲)
シンボル | マッチングルール | グリードルール |
---|---|---|
*? | 前の文字0または無制限の拡大 | 最小一致 |
+? | 1か | 最小一致 |
?? | 0または1 | 最小一致 |
{M、N} | あなたはnの回mnを文字を拡張する前に、 | グリードマッチ |
import re
#贪婪匹配
match = re.search(r'py.*n','pyanbncndn')
print(match.group(0))
#最小匹配加'?'
match = re.search(r'py.*?n','pyanbncndn')
print(match.group(0))
4.名前
M(?<名> \ + w)がT・グループ( "名前")
import re
print(re.search("(?<ta_name>\w+)\w+",h1hellth).group("ta_name"))