パイソン(ビルトインモジュールⅠ)
直列化モジュール(非常に重要)
シリアル化:データ構造(リスト、辞書が...)、特定のプロセスの列に変換しました
我々が今持っている問題を解決するには、次のとおりです。任意のデータ構造と互換できる文字列の特別な種類がある場合。
シーケンス・モジュール:データ構造は、特定の配列(特定の文字列、バイト)に変換され、また、バック反転されてもよいです。
二、JSONとpickleモジュール
JSONモジュール:それはすべての言語のシーケンスとして認識されているが、限られた支援Pythonのデータ構造(STR BOOL dictのint型リスト(タプル)、フロートなし)、
JSONモジュールはデータ構造であり、特殊な文字列に変換条件を満たし、かつまた、バック復元デシリアライズすることができます
4つの方法の二対のJSONシーケンス
負荷をダンプします。主にネットワークの伝送のために使用されます
import json dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = json.dumps(dic) #序列化:将一个字典转换成一个字符串 print(type(str_dic),str_dic) #<class 'str'> {"k3": "v3", "k1": "v1", "k2": "v2"} #注意,json转换完的字符串类型的字典中的字符串是由""表示的 dic2 = json.loads(str_dic) #反序列化:将一个字符串格式的字典转换成一个字典 #注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示 print(type(dic2),dic2) #<class 'dict'> {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'} list_dic = [1,['a','b','c'],3,{'k1':'v1','k2':'v2'}] str_dic = json.dumps(list_dic) #也可以处理嵌套的数据类型 print(type(str_dic),str_dic) #<class 'str'> [1, ["a", "b", "c"], 3, {"k1": "v1", "k2": "v2"}] list_dic2 = json.loads(str_dic) print(type(list_dic2),list_dic2) #<class 'list'> [1, ['a', 'b', 'c'], 3, {'k1': 'v1', 'k2': 'v2'}]
ダンプ・ロード:個々のデータファイルへのアクセス
import json f = open('json_file.json','w') dic = {'k1':'v1','k2':'v2','k3':'v3'} json.dump(dic,f) #dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件 f.close() # json文件也是文件,就是专门存储json字符串的文件。 f = open('json_file.json') dic2 = json.load(f) #load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回 f.close() print(type(dic2),dic2)
同じファイルの複数の格納されたデータのJSON配列
dic1 = {'name':'boy1'}
dic2 = {'name':'boy2'}
dic3 = {'name':'boy3'}
f = open('序列化',encoding='utf-8',mode='a')
str1 = json.dumps(dic1)
f.write(str1+'\n')
str2 = json.dumps(dic2)
f.write(str2+'\n')
str3 = json.dumps(dic3)
f.write(str3+'\n')
f.close()
f = open('序列化',encoding='utf-8')
for line in f:
print(json.loads(line))
pickleモジュール:ピクルスモジュールPythonはすべてのデータ構造である等、オブジェクトタイプをバイトに変換し、次いで還元はまた、バックデシリアライズすることができるPython言語でのみ使用することができ、すべてのデータ型をサポートし、puthon手段
ピクルスシリアライズ二対4つの方法
負荷をダンプします:唯一のネットワーク伝送があります
import pickle dic = {'k1':'v1','k2':'v2','k3':'v3'} str_dic = pickle.dumps(dic) print(str_dic) # bytes类型 dic2 = pickle.loads(str_dic) print(dic2) #字典
# 还可以序列化对象 import pickle def func(): print(666) ret = pickle.dumps(func) print(ret,type(ret)) # b'\x80\x03c__main__\nfunc\nq\x00.' <class 'bytes'> f1 = pickle.loads(ret) # f1得到 func函数的内存地址 f1() # 执行func函数
ロードダンプ:ファイルのみを処理するためにWB RB ABで読み取るファイルのために書きます
dic = {(1,2):'oldboy',1:True,'set':{1,2,3}} f = open('pick序列化',mode='wb') pickle.dump(dic,f) f.close() with open('pick序列化',mode='wb') as f1: pickle.dump(dic,f1)
ファイルの複数に格納されたデータのピクルス配列
dic1 = {'name':'oldboy1'}
dic2 = {'name':'oldboy2'}
dic3 = {'name':'oldboy3'}
f = open('pick多数据',mode='wb')
pickle.dump(dic1,f)
pickle.dump(dic2,f)
pickle.dump(dic3,f)
f.close()
f = open('pick多数据',mode='rb')
while True:
try:
print(pickle.load(f))
except EOFError:
break
f.close()
三、osモジュール
内容量:フォルダの
作業ディレクトリ、現在のディレクトリ、親ディレクトリ
個々の学習:__ __ファイル動的に現在のファイルの絶対パスを取得
このPythonのファイルに関連する作業用パスを実行するには、現在の作業ディレクトリ
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 *** os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd ** os.curdir 返回当前目录: ('.') ** os.pardir 获取当前目录的父目录字符串名:('..') **
そして、フォルダの関連
os.makedirs() : 批量新建多级目录(文件)可生成多层递归目录*** os.removedirs() : 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推*** os.mkdir("abc") : 创建单级目录(文件)*** os.rmdir("abc") : 删除单级的目录(文件),当文件内有其他内容时,不会删除*** os.listdir(r"D:\s123") : 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印**
パスに関連付けられたパス***
os.path.abspath(path) 返回path规范化的绝对路径 *** os.path.split(path) 将path分割成目录和文件名二元组返回 *** os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 ** os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值,即os.path.split(path)的第二个元素。 ** os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False *** os.path.isabs(path) 如果path是绝对路径,返回True ** os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False *** os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False *** os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 *** os.path.getatime(path) 返回path所指向的文件或者目录的最后访问时间 ** os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 ** os.path.getsize(path) 返回path的大小 ***
注意:はos.stat(「パス/ファイル名」)は記載されている情報のファイル/ディレクトリ構造を取得し、
stat 结构: st_mode: inode 保护模式 st_ino: inode 节点号。 st_dev: inode 驻留的设备。 st_nlink: inode 的链接数。 st_uid: 所有者的用户ID。 st_gid: 所有者的组ID。 st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。 st_atime: 上次访问的时间。 st_mtime: 最后一次修改的时间。 st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
四、SYSモジュール
SYSモジュールはPythonインタプリタと対話するためのインタフェースであり、
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1) sys.version 获取Python解释程序的版本信息 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 *** sys.platform 返回操作系统平台名称
五、hashlibモジュール
このモジュールは、任意の長さのデータは、通常、(特定の規則に従って、固定長のデータ列に、その機能を介して、また、暗号化アルゴリズムと呼ばまたはアルゴリズム、ハッシュアルゴリズムなどのハッシュダイジェストアルゴリズムと呼ばれていました暗号化アルゴリズムの束の集合体である16進数の文字列表現)
hashlibの機能とポイントの利用:
- hashlib>固定長の文字列で型のデータバイト---> ---アルゴリズム
- すべての違いのバイトに異なる種類のデータ。
- バイトへのデータの同じタイプ必ずしも同じ結果。
- この変換プロセスは不可逆的です。
2つの主な目的のhashlibがあります。
暗号化されたパスワード
私たちは、共通のダイジェストアルゴリズムMD5は、例えば、文字列のMD5値を計算する必要があります。
import hashlib md5 = hashlib.md5() md5.update('123456'.encode('utf-8')) print(md5.hexdigest()) # 计算结果如下: 'e10adc3949ba59abbe56e057f20f883e' # 验证:相同的bytes数据转化的结果一定相同 import hashlib md5 = hashlib.md5() md5.update('123456'.encode('utf-8')) print(md5.hexdigest()) # 计算结果如下: 'e10adc3949ba59abbe56e057f20f883e' # 验证:不相同的bytes数据转化的结果一定不相同 import hashlib md5 = hashlib.md5() md5.update('12345'.encode('utf-8')) print(md5.hexdigest()) # 计算结果如下: '827ccb0eea8a706c4c34a16891f84e7b'
塩の暗号化
修正された塩
ret = hashlib.md5('xx流派'.encode('utf-8')) # xx流派就是固定的盐 ret.update('a'.encode('utf-8')) print(ret.hexdigest())
塩のダイナミクス
username = '九阴真经' ret = hashlib.md5(username[::2].encode('utf-8')) # 针对于每个账户,每个账户的盐都不一样 ret.update('a'.encode('utf-8')) print(ret.hexdigest())
しかし、このような金融業界などの企業の高いセキュリティ要件、のために、MD5暗号化方式は、SHAシリーズSHA1、SHA224、SHA512など、より多くの、より複雑な暗号化方式として、高い暗号化が必要になる場合があり、十分ではありませんセキュリティが高いが、効率が遅くなります。
# sha系列 : 安全系数高,耗时高 ret = hashlib.sha1() ret.update('jiuyinzhenjing'.encode('utf-8')) print(ret.hexdigest()) #也可加盐 ret = hashlib.sha384(b'asfdsa') ret.update('jiuyinzhenjing'.encode('utf-8')) print(ret.hexdigest()) # 也可以加动态的盐 ret = hashlib.sha384(b'asfdsa'[::2]) ret.update('jiuyinzhenjing'.encode('utf-8')) print(ret.hexdigest())
ファイルの整合性チェック
Linuxの注意を払う:すべてがファイルである、私たち普通のファイル、ファイル、ビデオ、オーディオ、画像、およびアプリケーションがすべてのファイルです。
私たちのオンラインの世界では、多くの場合、ウイルス、トロイの木馬が発生した異なる場合、MD5は、必ずしも同じと同じ暗号化方式の結果を使用してバイトに、変換値は、データのバイトの種類で同じデータを計算し、非常に安全ですデータ・バイトは、(1先ほどデータスペースを削除しても)、同じ暗号化の結果に変換され、異なるものになります。だから、hashlibは、ファイルの整合性検証のための重要なツールです。
機能を使用すると、テストファイルのMD5次の方法を行うことができ、知識を学んだ使用することができます
def file_check(file_path): with open(file_path,mode='rb') as f1: sha256 = hashlib.sha256() while 1: content = f1.read(1024) if content: sha256.update(content) else: return sha256.hexdigest() print(file_check('pycharm-professional-2019.1.1.exe'))