python常見模塊與用法

一、常見內置模塊

1.1什麼叫做模塊?

import XXXX
xxxxx就是模塊 .py

1.2模塊的分類

1.random
2.math
3.內置模塊

1.3第三方的模塊(需要安裝)

在線安裝 cmd 窗口下通過 pip install 模塊名
python -m pip install 模塊的名

離線安裝 下載好所需要的安裝包 zip —- 解壓安裝包 ——setup.py——–cmd : python install
setup.py

二、模塊導入的問題

import 模塊名

import random

import 模塊名 as 別名

import random as r

from 包 import 模塊的名稱

from os import path

三、random模塊

用來產生隨機數(偽隨機數)

[ ‘BPF’, ‘LOG4′, ‘NV_MAGICCONST’, ‘RECIP_BPF’, ‘Random’, ‘SG_MAGICCONST’, ‘SystemRandom’,‘TWOPI’, ‘Sequence’, ‘Set’, ‘all’, ‘builtins’, ‘cached’, ‘doc’, ‘file’, ‘loader’, ‘name’, ‘package’, ‘spec’,‘accumulate’, ‘acos’, ‘bisect’, ‘ceil’, ‘cos’, ‘e’, ‘exp’, ‘floor’, ‘inst’, ‘log’, ‘os’, ‘pi’, ‘random’, ‘repeat’, ‘sha512′,‘sin’, ‘sqrt’, ‘test’, ‘test_generator’, ‘urandom’, ‘_warn’, ‘betavariate’, ‘choice’, ‘choices’, ‘expovariate’,‘gammavariate’, ‘gauss’, ‘getrandbits’, ‘getstate’, ‘lognormvariate’, ‘normalvariate’, ‘paretovariate’,‘randbytes’, ‘randint’, ‘random’, ‘randrange’, ‘sample’, ‘seed’, ‘setstate’, ‘shuffle’, ‘triangular’,‘uniform’, ‘vonmisesvariate’, ‘weibullvariate’ ]

主要常見的random模塊的函數:

3.1randint() ——— 產生隨機整數[m,n]

在這裡插入圖片描述

3.2random() ————–產生0-1的隨機數[0,1)

在這裡插入圖片描述

3.3uniform() ————- 產生正態分佈的隨機數

在這裡插入圖片描述

3.4randrange() —— 產生一個范圍內的隨機數

在這裡插入圖片描述

3.5choices() ———- 用在序列(容器)(有序的序列)隨機篩取一個元素

在這裡插入圖片描述

四、math模塊

用於數學運算

[‘doc’, ‘loader’, ‘name’, ‘package’, ‘spec’, ‘acos’, ‘acosh’, ‘asin’, ‘asinh’, ‘atan’, ‘atan2′, ‘atanh’,
‘ceil’, ‘comb’, ‘copysign’, ‘cos’, ‘cosh’, ‘degrees’, ‘dist’, ‘e’, ‘erf’, ‘erfc’, ‘exp’, ‘expm1′, ‘fabs’, ‘factorial’,
‘floor’, ‘fmod’, ‘frexp’, ‘fsum’, ‘gamma’, ‘gcd’, ‘hypot’, ‘inf’, ‘isclose’, ‘isfinite’, ‘isinf’, ‘isnan’, ‘isqrt’,
‘lcm’, ‘ldexp’, ‘lgamma’, ‘log’, ‘log10′, ‘log1p’, ‘log2′, ‘modf’, ‘nan’, ‘nextafter’, ‘perm’, ‘pi’, ‘pow’,
‘prod’, ‘radians’, ‘remainder’, ‘sin’, ‘sinh’, ‘sqrt’, ‘tan’, ‘tanh’, ‘tau’, ‘trunc’, ‘ulp’]

ceil ————- 向上取整
floor ———– 向下取整
e ———— 屬性 自然常數
fabs ———– 求絕對值 等價 abs() 全局函數
fmod ———– 求模運算
isnan ——– 判斷是不是數字 (是數字返回 false nan —–not a number)
isfinite —– 判斷是不是無限
pi ———– 圓周率
pow ————- 冪次方
sqrt ———- 平方根

五、os模塊

5.1操作系統文件

清屏的方法 ——— import os os.system(“cls”)

[‘DirEntry’, ‘F_OK’, ‘GenericAlias’, ‘Mapping’, ‘MutableMapping’, ‘O_APPEND’, ‘O_BINARY’,
‘O_CREAT’, ‘O_EXCL’, ‘O_NOINHERIT’, ‘O_RANDOM’, ‘O_RDONLY’, ‘O_RDWR’, ‘O_SEQUENTIAL’,
‘O_SHORT_LIVED’, ‘O_TEMPORARY’, ‘O_TEXT’, ‘O_TRUNC’, ‘O_WRONLY’, ‘P_DETACH’, ‘P_NOWAIT’,‘P_NOWAITO’, ‘P_OVERLAY’, ‘P_WAIT’, ‘PathLike’, ‘R_OK’, ‘SEEK_CUR’, ‘SEEK_END’, ‘SEEK_SET’,‘TMP_MAX’, ‘W_OK’, ‘X_OK’, ‘AddedDllDirectory’, ‘Environ’, ‘all’, ‘builtins’, ‘cached’, ‘doc’, ‘file’,‘loader’, ‘name’, ‘package’, ‘spec’, ‘check_methods’, ‘execvpe’, ‘exists’, ‘exit’, ‘fspath’,
‘get_exports_list’, ‘walk’, ‘wrap_close’, ‘abc’, ‘abort’, ‘access’, ‘add_dll_directory’, ‘altsep’, ‘chdir’,
‘chmod’, ‘close’, ‘closerange’, ‘cpu_count’, ‘curdir’, ‘defpath’, ‘device_encoding’, ‘devnull’, ‘dup’,
‘dup2′, ‘environ’, ‘error’, ‘execl’, ‘execle’, ‘execlp’, ‘execlpe’, ‘execv’, ‘execve’, ‘execvp’, ‘execvpe’,
‘extsep’, ‘fdopen’, ‘fsdecode’, ‘fsencode’, ‘fspath’, ‘fstat’, ‘fsync’, ‘ftruncate’, ‘get_exec_path’,
‘get_handle_inheritable’, ‘get_inheritable’, ‘get_terminal_size’, ‘getcwd’, ‘getcwdb’, ‘getenv’,
‘getlogin’, ‘getpid’, ‘getppid’, ‘isatty’, ‘kill’, ‘linesep’, ‘link’, ‘listdir’, ‘lseek’, ‘lstat’, ‘makedirs’, ‘mkdir’,
‘name’, ‘open’, ‘pardir’, ‘path’, ‘pathsep’, ‘pipe’, ‘popen’, ‘putenv’, ‘read’, ‘readlink’, ‘remove’,
‘removedirs’, ‘rename’, ‘renames’, ‘replace’, ‘rmdir’, ‘scandir’, ‘sep’, ‘set_handle_inheritable’,
‘set_inheritable’, ‘spawnl’, ‘spawnle’, ‘spawnv’, ‘spawnve’, ‘st’, ‘startfile’, ‘stat’, ‘stat_result’,
‘statvfs_result’, ‘strerror’, ‘supports_bytes_environ’, ‘supports_dir_fd’, ‘supports_effective_ids’,
‘supports_fd’, ‘supports_follow_symlinks’, ‘symlink’, ‘sys’, ‘system’, ‘terminal_size’, ‘times’,
‘times_result’, ‘truncate’, ‘umask’, ‘uname_result’, ‘unlink’, ‘unsetenv’, ‘urandom’, ‘utime’, ‘waitpid’,
‘waitstatus_to_exitcode’, ‘walk’, ‘write’]

5.2os模塊常用方法

chdir() ——- 修改工作目錄
curdir ——- 獲取當前的目錄 返回的結果的是相對路徑 (絕對路徑 os.path.abspath(os.curdir) )
chmod() ———修改權限
close ——– 關閉文件的路徑
cpu_count() ——— 返回的cpu的核對應得線程數
getcwd() ———-獲取當前路徑,返回得是絕對路徑,相當linux下pwd
getpid()——-獲取當前進程的進程編號
getppid() ————獲取當前進程的父進程的進程編號
kill() ————- 通過進程編號殺死進程
linesep ——– 屬性 對應系統下的換行符
listdir() —— 返回的對應目錄下所有的文件和文件夾(隱藏的文件夾),返回的是列表
makedirs() —– 創建目錄,支持多層目錄的創建
mkdir() —– 創建目錄,隻能創建一層,不支持多層
open()——創建文件 open()全局函數
pathsep ——- 獲取環境變量分隔符 windows ; linux分割符 :
sep ——— 獲取路徑分割符
remove(文件名或者路徑) ———-刪除文件
removedirs() ————— 刪除目錄,支持多級刪除(遞歸)
system()——– 執行終端命令

5.3os.path模塊

import os.path
import os.path as p
from os import path

[‘all’, ‘builtins’, ‘cached’, ‘doc’, ‘file’, ‘loader’, ‘name’, ‘package’, ‘spec’, ‘abspath_fallback’,
‘get_bothseps’, ‘getfinalpathname’, ‘getfinalpathname_nonstrict’, ‘getfullpathname’,
‘getvolumepathname’, ‘nt_readlink’, ‘readlink_deep’, ‘abspath’, ‘altsep’, ‘basename’, ‘commonpath’,
‘commonprefix’, ‘curdir’, ‘defpath’, ‘devnull’, ‘dirname’, ‘exists’, ‘expanduser’, ‘expandvars’, ‘extsep’,
‘genericpath’, ‘getatime’, ‘getctime’, ‘getmtime’, ‘getsize’, ‘isabs’, ‘isdir’, ‘isfile’, ‘islink’, ‘ismount’,
‘join’, ‘lexists’, ‘normcase’, ‘normpath’, ‘os’, ‘pardir’, ‘pathsep’, ‘realpath’, ‘relpath’, ‘samefile’,
‘sameopenfile’, ‘samestat’, ‘sep’, ‘split’, ‘splitdrive’, ‘splitext’, ‘stat’, ‘supports_unicode_filenames’,
‘sys’]

abspath(相對路徑) —————– 返回的路徑的所對應的絕對路徑
altsep —————— 返回的python中的分隔符
basename ———— 文件名稱
dirname ———– 文件目錄
exists —————- 判斷文件或者目錄是否存在
getctime ——– 獲取時間(創建時間)
getmtime ———— 獲取修改時間
getsize ———— 獲取文件的大小,單位是字節
isdir————– 判斷path是否是目錄(文件夾)
isfile——————-判斷path是否是文件
isabs ————- 判斷是不是絕對路徑
islink ——- 判斷是不是鏈接
ismount ———- 判斷是不是掛載文件
join ————– 拼接路徑
sep ———– 路徑分隔符
split ———-分割路徑
relpath ————- 返回的真正的路徑和abspath一樣

5.4練習

需要結合os.path 和 os 模塊,以及函數的遞歸

給出一個路徑,遍歷當前路徑所有文件和文件夾,打印出所有的文件(遇到文件輸出路徑,如果遇
到的文件夾繼續遍歷文件夾)

import os
from os import path
def scanner_file(url):
    files = os.listdir(url)
    #拼接路徑
    for file in files:
        #real_path = url + "\\" + f
        real_path = path.join(url,file)
        #print (file)
        if path.isfile(real_path):
            l = path.abspath(real_path) # 把取出來的路徑賦值給L
            print(l)#輸出在屏幕上
        elif path.isdir(real_path):
            scanner_file(real_path)
        else:
            print("其他情況")
            pass
scanner_file("E:\\")

六、sys模塊

[‘breakpointhook’, ‘displayhook’, ‘doc’, ‘excepthook’, ‘interactivehook’, ‘loader’, ‘name’,
‘package’, ‘spec’, ‘stderr’, ‘stdin’, ‘stdout’, ‘unraisablehook’, ‘base_executable’, ‘clear_type_cache’,
‘current_frames’, ‘debugmallocstats’, ‘enablelegacywindowsfsencoding’, ‘framework’, ‘getframe’, ‘git’,
‘home’, ‘xoptions’, ‘addaudithook’, ‘api_version’, ‘argv’, ‘audit’, ‘base_exec_prefix’, ‘base_prefix’,
‘breakpointhook’, ‘builtin_module_names’, ‘byteorder’, ‘call_tracing’, ‘copyright’, ‘displayhook’,
‘dllhandle’, ‘dont_write_bytecode’, ‘exc_info’, ‘excepthook’, ‘exec_prefix’, ‘executable’, ‘exit’, ‘flags’,
‘float_info’, ‘float_repr_style’, ‘get_asyncgen_hooks’, ‘get_coroutine_origin_tracking_depth’,
‘getallocatedblocks’, ‘getdefaultencoding’, ‘getfilesystemencodeerrors’, ‘getfilesystemencoding’,
‘getprofile’, ‘getrecursionlimit’, ‘getrefcount’, ‘getsizeof’, ‘getswitchinterval’, ‘gettrace’,
‘getwindowsversion’, ‘hash_info’, ‘hexversion’, ‘implementation’, ‘int_info’, ‘intern’, ‘is_finalizing’,
‘maxsize’, ‘maxunicode’, ‘meta_path’, ‘modules’, ‘path’, ‘path_hooks’, ‘path_importer_cache’,
‘platform’, ‘platlibdir’, ‘prefix’, ‘ps1′, ‘ps2′, ‘pycache_prefix’, ‘set_asyncgen_hooks’
‘set_coroutine_origin_tracking_depth’, ‘setprofile’, ‘setrecursionlimit’, ‘setswitchinterval’, ‘settrace’,
‘stderr’, ‘stdin’, ‘stdout’, ‘thread_info’, ‘unraisablehook’, ‘version’, ‘version_info’, ‘warnoptions’,
‘winver’]

api_version ————– 屬性 獲取python內部的版本號
argv ——— 接收腳本參數
copyright ———— 輸出cpython版本號
exit ———- 退出系統
getdefaultencoding()————-獲取的默認編碼,python3默認編碼是utf-8
getfilesystemencoding()———— 獲取文件系統的默認編程,默認utf-8
getrecursionlimit()——- 獲取python對遞歸的限制層數
setrecursionlimit() ————-重新設置遞歸的限制的層數
getrefcount(對象)——— 獲取對象的引用計數,是垃圾回收機制裡的引用計數,註意任何對象都
有一個默認引用計數
getwindowsversion() ———- 獲取當前窗口的版本信息
version ———–## 標題– 獲取版本信息

**python的垃圾回收機制:

以引用計數為主,以標記清除和分代收集為輔
Java 以標記清除為主,以引用計數和分代收集為輔 **

七、時間模塊

 7.1time模塊

python提供操作日期和時間的模塊

[‘_STRUCT_TM_ITEMS’, ‘doc’, ‘loader’, ‘name’, ‘package’, ‘spec’, ‘altzone’, ‘asctime’, ‘ctime’,
‘daylight’, ‘get_clock_info’, ‘gmtime’, ‘localtime’, ‘mktime’, ‘monotonic’, ‘monotonic_ns’,
‘perf_counter’, ‘perf_counter_ns’, ‘process_time’, ‘process_time_ns’, ‘sleep’, ‘strftime’, ‘strptime’,
‘struct_time’, ‘thread_time’, ‘thread_time_ns’, ‘time’, ‘time_ns’, ‘timezone’, ‘tzname’]

asctime() ———— 獲取當前時間
ctime()—— 獲取當前時間
localtime()—— 獲取的本地時間,返回的是對象
sleep()——– 表示休眠的時間,單位秒
time()—————- 獲取當前系統的時間戳,單位也是秒
strftime()——- 將時間對象格式化成字符串
strptime()——將一個特定的時間字符串轉換為時間對象

7.2datetime模塊

對Time模塊的補充

from datetime import datetime
[‘add’, ‘class’, ‘delattr’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘gt’, ‘hash’, ‘init’,
‘init_subclass’, ‘le’, ‘lt’, ‘ne’, ‘new’, ‘radd’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘rsub’, ‘setattr’, ‘sizeof’,
‘str’, ‘sub’, ‘subclasshook’, ‘astimezone’, ‘combine’, ‘ctime’, ‘date’, ‘day’, ‘dst’, ‘fold’,
‘fromisocalendar’, ‘fromisoformat’, ‘fromordinal’, ‘fromtimestamp’, ‘hour’, ‘isocalendar’,
‘isoformat’, ‘isoweekday’, ‘max’, ‘microsecond’, ‘min’, ‘minute’, ‘month’, ‘now’, ‘replace’, ‘resolution’,
‘second’, ‘strftime’, ‘strptime’, ‘time’, ‘timestamp’, ‘timetuple’, ‘timetz’, ‘today’, ‘toordinal’, ‘tzinfo’,
‘tzname’, ‘utcfromtimestamp’, ‘utcnow’, ‘utcoffset’, ‘utctimetuple’, ‘weekday’, ‘year’]

now() ————獲取當前的時間

八、其他模塊

日歷的模塊(calendar)

uuid 模塊 ———— 一般會用在文件上傳或者文件備份的時候:

產生一個永不重復的字符串
uuid.uuid4().hex

練習:完成用戶註冊登錄的案例(加鹽值混淆)

import sys
import hashlib
users=[]
salt = "#[email protected][email protected]!%^#&^!&!##@!"
def main():
    print("*~"*20)
    print("1.用戶註冊")
    print("2.用戶登錄")
    print("3.退出系統")
    print("*~"*20)
    choice = input("請選擇對應想要的操作:")
    return choice

def register():
    username = input("請輸入註冊用戶名:")
    passwd = input("請輸入註冊用戶密碼:")
    if username == None or username.strip() == "":
        print("用戶名不能為空")
        return
    if passwd == None or passwd.strip()=="" or len(passwd) < 6:
        print("用戶密碼不能為空或者小於6位長度")
        return
    passwd = passwd_md5(passwd)
    for i in users:
        if i.get("username") == username:
            print("用戶名重復")
            return
    user = {}
    user["username"] = username
    user["passwd"] = passwd
    users.append(user)
    print(users)

def passwd_md5(passwd):
    md5 = hashlib.md5(passwd.encode("utf-8"))
    md5.update(salt.encode("utf-8"))
    return md5.hexdigest()

def is_login(username,passwd):
    for i in users:
        if i.get("username") == username and i.get("passwd") == passwd:
            return True
        return False

def login():
    username = input("請輸入登陸的用戶名:")
    passwd = input("請輸入登陸用戶密碼:")
    passwd = passwd_md5(passwd)
    if is_login(username,passwd):
        print("恭喜,登陸成功")
        print(users) /
    else:
        print("抱歉,登陸失敗")

while(True):
    choice = main()
    if choice == "1":
        print("註冊")
        register()
    elif choice =="2":
        print("登陸")
        login()
    elif choice =="3":
        print("退出系統......")
        sys.exit()

九、加密算法的介紹

有瞭解加密? 加密是計算機中最重要的技術之一

分類:

以算法的是否可逆:

可逆算法

是不是使用同一密鑰:

對稱加密

解密和加密的時候使用同一個密鑰
DES算法

不對稱加密

加密和解密使用的是同一對密鑰(公鑰、私鑰)https協議 RSA算法

不可逆算法(hash算法)

特點:不可逆、結果是唯一的

MD5

十、hashlib庫

10.1哈希算法

import hashlib

使用步驟:

創建算法對象(md5 sha256),返回的是算法對象
md5 = hashlib.md5()
md5
一個字符串加密的話md5 = hashlib.md5(“123”.encode(“utf-8”))
如果不做鹽值混淆, md5.hexdigest()

鹽值混淆

md5.update(鹽值)

在這裡插入圖片描述

鹽值越復雜,加密的安全性就越高

cmd5.com 解密

10.2hmac庫

也是一個哈希加密庫,用到瞭對稱加密
new()
參數:第一個參數是要加密的字符串,第二個參數鹽值,第三個參數是加密算法
首先使用對稱加密(密鑰就是鹽值),得到加密的結果之後又進行瞭一次hash加密(鹽值混淆)

在這裡插入圖片描述

十一、對象序列化

什麼是對象序列化?

字典 列表 元組 集合 ————– 對象

序列化:將抽象的這些對象的概念轉換真正的字符或者字節數據

十二、pickle模塊

[‘ADDITEMS’, ‘APPEND’, ‘APPENDS’, ‘BINBYTES’, ‘BINBYTES8′, ‘BINFLOAT’, ‘BINGET’, ‘BININT’,
‘BININT1′, ‘BININT2′, ‘BINPERSID’, ‘BINPUT’, ‘BINSTRING’, ‘BINUNICODE’, ‘BINUNICODE8′, ‘BUILD’,‘BYTEARRAY8′, ‘DEFAULT_PROTOCOL’, ‘DICT’, ‘DUP’, ‘EMPTY_DICT’, ‘EMPTY_LIST’, ‘EMPTY_SET’,‘EMPTY_TUPLE’, ‘EXT1′, ‘EXT2′, ‘EXT4′, ‘FALSE’, ‘FLOAT’, ‘FRAME’, ‘FROZENSET’, ‘FunctionType’, ‘GET’,‘GLOBAL’, ‘HIGHEST_PROTOCOL’, ‘INST’, ‘INT’, ‘LIST’, ‘LONG’, ‘LONG1′, ‘LONG4′, ‘LONG_BINGET’,‘LONG_BINPUT’, ‘MARK’, ‘MEMOIZE’, ‘NEWFALSE’, ‘NEWOBJ’, ‘NEWOBJ_EX’, ‘NEWTRUE’,‘NEXT_BUFFER’, ‘NONE’, ‘OBJ’, ‘PERSID’, ‘POP’, ‘POP_MARK’, ‘PROTO’, ‘PUT’, ‘PickleBuffer’,‘PickleError’, ‘Pickler’, ‘PicklingError’, ‘PyStringMap’, ‘READONLY_BUFFER’, ‘REDUCE’, ‘SETITEM’,‘SETITEMS’, ‘SHORT_BINBYTES’, ‘SHORT_BINSTRING’, ‘SHORT_BINUNICODE’, ‘STACK_GLOBAL’,‘STOP’, ‘STRING’, ‘TRUE’, ‘TUPLE’, ‘TUPLE1′, ‘TUPLE2′, ‘TUPLE3′, ‘UNICODE’, ‘Unpickler’,‘UnpicklingError’, ‘Framer’, ‘HAVE_PICKLE_BUFFER’, ‘Pickler’, ‘Stop’, ‘Unframer’, ‘Unpickler’, ‘all’,‘builtins’, ‘cached’, ‘doc’, ‘file’, ‘loader’, ‘name’, ‘package’, ‘spec’, ‘compat_pickle’, ‘dump’, ‘dumps’,‘extension_cache’, ‘extension_registry’, ‘getattribute’, ‘inverted_registry’, ‘load’, ‘loads’, ‘test’,
‘_tuplesize2code’, ‘bytes_types’, ‘codecs’, ‘compatible_formats’, ‘decode_long’, ‘dispatch_table’,
‘dump’, ‘dumps’, ‘encode_long’, ‘format_version’, ‘io’, ‘islice’, ‘load’, ‘loads’, ‘maxsize’, ‘pack’,
‘partial’, ‘re’, ‘sys’, ‘unpack’, ‘whichmodule’]

dumps ————– 將對象序列化為字節數據 .dat

在這裡插入圖片描述

loads ————– 將數據反序列化為對象

users = [1,2,3,4,5]
data = pickle.dumps(users) # 將對象序列化
    f = open("a.txt","wb")
    f.write(data)
    f.close()
    f = open("a.dat","wb")
    f.write(data)
    f.close()
    f = open("a.dat","rb")
    show = f.read()
    print(data,"\n")
    print("對象序列化為字節數據:",show,"\n")
    print("將數據反序列化為對象:",pickle.loads(show),"\n")  #將數據反序列化為對象

dump ————–將對象序列化為字節數據 ,並且保存到file

load ————– 將數據反序列化為對象

十三、json模塊

Python2隻能操作字典對象

dumps ————– 將對象序列化為字節數據 .dat

loads ————– 將數據反序列化為對象

dump ————–將對象序列化為字節數據 ,並且保存到file

load ————– 將數據反序列化為對象

到此這篇關於python常見模塊與用法的文章就介紹到這瞭,更多相關python模塊用法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!