Python中12個常用模塊的使用教程

来源:https://www.cnblogs.com/djdjdj123/archive/2022/12/08/16966370.html
-Advertisement-
Play Games

1. time模塊 import time *一*#時間戳--》結構化時間--》格式化的字元串時間 res1=time.localtime(654126574) print(res1 ) #res1 time.struct_time(tm_year=1990, tm_mon=9, tm_mday=2 ...


1. time模塊

在這裡插入圖片描述

import time
*一*#時間戳--》結構化時間--》格式化的字元串時間
-----------------------------------------------------------------------------
res1=time.localtime(654126574) 
print(res1 )
#res1====time.struct_time(tm_year=1990, tm_mon=9, tm_mday=24, tm_hour=5, tm_min=49, tm_sec=34, tm_wday=0, tm_yday=267, tm_isdst=0)
-----------------------------------------------------------------------------
res2=time.strftime('%Y-%m-%d %H:%M:%S',res1)  
print(res2)                                     
#res2=====1990-09-24 05:49:34
----------------------------------------------------------------------------
*二*#格式化的字元串時間--》結構化時間--》時間戳
res1=time.strptime('1990-09-24 05:49:34','%Y-%m-%d %H:%M:%S')
print(res1)
#res1====time.struct_time(tm_year=1990, tm_mon=9, tm_mday=24, tm_hour=5, tm_min=49, tm_sec=34, tm_wday=0, tm_yday=267, tm_isdst=-1)
----------------------------------------------------------------------
res2=time.mktime(res1)
print(res2)
#res2=====654126574.0

三#時間加減
import datetime

print(datetime.datetime.now()) #返回系統當前時間格式為2021-08-16 15:11:49.477146
print(datetime.date.fromtimestamp(time.time()) )  # 時間戳直接轉成日期格式 2021-08-16
print(datetime.datetime.now() + datetime.timedelta(3)) #當前時間+3天
print(datetime.datetime.now() + datetime.timedelta(-3)) #當前時間-3天
print(datetime.datetime.now() + datetime.timedelta(hours=3)) #當前時間+3小時
print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #當前時間+30分

c_time  = datetime.datetime.now()
print(c_time.replace(minute=3,hour=2)) #時間替換

2.radom模塊

import random

print(random.random())#(0,1)----float    大於0且小於1之間的小數

print(random.randint(1,3))  #[1,3]    大於等於1且小於等於3之間的整數

print(random.randrange(1,3)) #[1,3)    大於等於1且小於3之間的整數 顧頭不顧尾range

print(random.choice([1,'23',[4,5]]))#1或者23或者[4,5] 列表隨機選一個

print(random.sample([1,'23',[4,5]],2))#列表元素任意2個組合  列表隨機選倆

print(random.uniform(1,3))#大於1小於3的小數,如1.927109612082716


item=[1,3,5,7,9]
random.shuffle(item) #打亂item的順序,相當於"洗牌" 隨機排序
print(item)
####補充知識  print(ord(90))=Z  數字轉換阿斯克碼
#            chr('A')字元轉換數字
#生成隨機數0-9或者A-Z
def make_radom(k):
    dic=''
    for i in range(k):
        s1=str(random.randint(0,9))
        s2=chr(random.randint(65,90))
        dic += random.choice([s1,s2])
    return dic
print(make_radom(4))

3.OS模塊

os.getcwd() #獲取當前工作目錄,即當前python腳本工作的目錄路徑
os.chdir("dirname")  #改變當前腳本工作目錄;相當於shell下cd
os.curdir  返回當前目錄: ('.')
os.pardir  獲取當前目錄的父目錄字元串名:('..')
os.makedirs('dirname1/dirname2')    可生成多層遞歸目錄
os.removedirs('dirname1')    若目錄為空,則刪除,並遞歸到上一級目錄,如若也為空,則刪除,依此類推
os.mkdir('dirname')    生成單級目錄;相當於shell中mkdir dirname
os.rmdir('dirname')    刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell中rmdir dirname
os.listdir('dirname')    列出指定目錄下的所有文件和子目錄,包括隱藏文件,並以列表方式列印
os.remove()  刪除一個文件
os.rename("oldname","newname")  重命名文件/目錄
os.stat('path/filename')  獲取文件/目錄信息
os.sep    輸出操作系統特定的路徑分隔符,win下為"\\",Linux下為"/"
os.linesep    輸出當前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"
os.pathsep    輸出用於分割文件路徑的字元串 win下為;,Linux下為:
os.name    輸出字元串指示當前使用平臺。win->'nt'; Linux->'posix'
os.system("bash command")  運行shell命令,直接顯示
os.environ  獲取系統環境變數
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  path可以是文件也可以是文件夾
os.path.isabs(path)  如果path是絕對路徑,返回True
os.path.isfile(path) #如果path是一個存在的文件,返回True。否則返回False   path只可以是文件
os.path.isdir(path)  #如果path是一個存在的目錄,則返回True。否則返回False path只可以是文件夾
os.path.join(path1[, path2[, ...]]) # 將多個路徑組合後返回,第一個絕對路徑之前的參數將被忽略
os.path.getatime(path)  返回path所指向的文件或者目錄的最後存取時間
os.path.getmtime(path)  返回path所指向的文件或者目錄的最後修改時間
os.path.getsize(path) 返回path的大小 

4.sys模塊

sys.argv           #命令行參數List,第一個元素是程式本身路徑
sys.exit(n)        退出程式,正常退出時exit(0)
sys.version        獲取Python解釋程式的版本信息
sys.maxint         最大的Int值
sys.path          # 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變數的值 
sys.platform       返回操作系統平臺名稱

5.shutil模塊

shutil.copyfileobj(fsrc, fdst[, length])
將文件內容拷貝到另一個文件中

import shutil

shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w')) 

shutil.copyfile(src, dst)

拷貝文件

shutil.copyfile('f1.log', 'f2.log') #目標文件無需存在

shutil.copymode(src, dst)
僅拷貝許可權。內容、組、用戶均不變

shutil.copymode('f1.log', 'f2.log') #目標文件必須存在

shutil.copystat(src, dst)
僅拷貝狀態的信息,包括:mode bits, atime, mtime, flags

shutil.copystat('f1.log', 'f2.log') #目標文件必須存在

shutil.copy(src, dst)
拷貝文件和許可權

 import shutil
  
 shutil.copy('f1.log', 'f2.log')

shutil.copy2(src, dst)
拷貝文件和狀態信息

import shutil
 
shutil.copy2('f1.log', 'f2.log')

shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
遞歸的去拷貝文件夾

import shutil
 
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目標目錄不能存在,

註意對folder2目錄父級目錄要有可寫許可權,ignore的意思是排除

拷貝軟連接

shutil.rmtree(path[, ignore_errors[, onerror]])
遞歸的去刪除文件

import shutil
  
shutil.rmtree('folder1')

shutil.move(src, dst)
遞歸的去移動文件,它類似mv命令,其實就是重命名。

import shutil
 
shutil.move('folder1', 'folder3')

壓縮打包文件

import shutil                                          # 打包這個文件夾
ret = shutil.make_archive('./xxx', 'gztar', root_dir=r'G:\pycharmproject\ATM')

解壓

import tarfile

t=tarfile.open("xxx.tar.gz",'r')                #解壓的文件
t.extractall(r'G:\pycharmproject\day14\aaa')    #解壓完放在這
t.close()             

6.json&pickle模塊

序列化

  • 記憶體中的數據類型------序列化-------》格式
  • 記憶體中的數據類型《------反序列化-------格式

作用:

  • 存檔---》pickle
  • 跨平臺交互數據---》json
# =====================================>json相容所有語言,但是不支持所有的python數據類型
# 
# ====================> dumps--->loads
import json

str_json = json.dumps({"x":1,'y':2,'z':True,'a':None})
print(str_json)   #{"x": 1, "y": 2, "z": true, "a": null}

dic = json.loads(str_json)
print(dic)    #{'x': 1, 'y': 2, 'z': True, 'a': None}
# ====================> dump--->load
import json
dumps loads 操作的是字元串類型

直接寫到a.json裡面
json.dump({"x":1,'y':2,'z':True,'a':None},open('a.json',mode='wt',encoding='utf-8'))
讀出來一句話搞定
dic = json.load(open('a.json',mode='rt',encoding='utf-8'))
print(dic)
dump load 操作的是字典類型




=====================================> pickle只適用於python,但是可以支持所有python的數據類型
# ====================> dumps--->loads
import pickle

res_pkl = pickle.dumps({"x":1,'y':2,'z':True,'a':None})
print(res_pkl)

dic = pickle.loads(res_pkl)
print(dic)


# ====================> dump--->load
import pickle

pickle.dump({"x":1,'y':2,'z':True,'a':None},open('a.pkl',mode='wb'))

dic = pickle.load(open('a.pkl',mode='rb'))
print(dic)




import pickle
import json
# Python學習交流群:711312441
# res = pickle.dumps({1,2,3,4,5,6})
res = json.dumps({1,2,3,4,5,6})
print(res)

7. shelve模塊

shelve模塊比pickle模塊簡單,只有一個open函數,返回類似字典的對象,可讀可寫;key必須為字元串,而值可以是python所支持的數據類型

import shelve

f=shelve.open(r'sheve.txt')
# f['stu1_info']={'name':'egon','age':18,'hobby':['piao','smoking','drinking']}
# f['stu2_info']={'name':'gangdan','age':53}
# f['school_info']={'website':'http://www.pypy.org','city':'beijing'}

print(f['stu1_info']['hobby'])
f.close()

8.xml模塊

xml是實現不同語言或程式之間進行數據交換的協議,跟json差不多,但json使用起來更簡單,不過,古時候,在json還沒誕生的黑暗年代,大家只能選擇用xml呀,至今很多傳統公司如金融行業的很多系統的介面還主要是xml。

9. configparser模塊

[section1]
k1 = v1
k2:v2
user=egon
age=18
is_admin=true
salary=31

[section2]
k1 = v1
import configparser

config=configparser.ConfigParser()
config.read('a.cfg')

#查看所有的標題
res=config.sections() #['section1', 'section2']
print(res)

#查看標題section1下所有key=value的key
options=config.options('section1')
print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']

#查看標題section1下所有key=value的(key,value)格式
item_list=config.items('section1')
print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), ('is_admin', 'true'), ('salary', '31')]

#查看標題section1下user的值=>字元串格式
val=config.get('section1','user')
print(val) #egon

#查看標題section1下age的值=>整數格式
val1=config.getint('section1','age')
print(val1) #18

#查看標題section1下is_admin的值=>布爾值格式
val2=config.getboolean('section1','is_admin')
print(val2) #True

#查看標題section1下salary的值=>浮點型格式
val3=config.getfloat('section1','salary')
print(val3) #31.0
#改寫
import configparser

config=configparser.ConfigParser()
config.read('a.cfg',encoding='utf-8')


#刪除整個標題section2
config.remove_section('section2')

#刪除標題section1下的某個k1和k2
config.remove_option('section1','k1')
config.remove_option('section1','k2')

#判斷是否存在某個標題
print(config.has_section('section1'))

#判斷標題section1下是否有user
print(config.has_option('section1',''))

#Python學習交流群:711312441
#添加一個標題
config.add_section('egon')

#在標題egon下添加name=egon,age=18的配置
config.set('egon','name','egon')
config.set('egon','age',18) #報錯,必須是字元串


#最後將修改的內容寫入文件,完成最終的修改
config.write(open('a.cfg','w'))

10. hashlib模塊

什麼叫hash:hash是一種演算法(3.x里代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 演算法),該演算法接受傳入的內容,經過運算得到一串hash值

hash值的特點是:

  • 只要傳入的內容一樣,得到的hash值必然一樣=====>要用明文傳輸密碼文件完整性校驗
  • 不能由hash值返解成內容=======》把密碼做成hash值,不應該在網路傳輸明文密碼
  • 只要使用的hash演算法不變,無論校驗的內容有多大,得到的hash值長度是固定的

11.suprocess模塊

import subprocess
                      #輸入cmd指令  stdout等於正確管道執行,stderr=錯誤管道執行
obj=subprocess.Popen("tasklist",shell=True,
                     stdout=subprocess.PIPE,
                     stderr=subprocess.PIPE,
                     )
print(obj)

print(obj.stdout.read().decode('gbk'))         #正確執行,都需要解碼指定gbk
print(obj.stderr.read().decode('gbk'))         #錯誤執行,都需要解碼指定gbk

12.logging模塊

#level等級設置
CRITICAL = 50 #FATAL = CRITICAL
ERROR = 40
WARNING = 30 #WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0 #不設置
#字典裡面主要設置這幾個
logger:產生日誌的對象

Filter:過濾日誌的對象

Handler:接收日誌然後控制列印到不同的地方,FileHandler用來列印到文件中,StreamHandler用來列印到終端

Formatter對象:可以定製不同的日誌格式對象,然後綁定給不同的Handler對象使用,以此來控制不同的Handler的日誌格式
#formatters裡面的列印到屏幕或者文件設置的參數
%(name)s:Logger的名字,並非用戶名,詳細查看

%(levelno)s:數字形式的日誌級別

%(levelname)s:文本形式的日誌級別

%(pathname)s:調用日誌輸出函數的模塊的完整路徑名,可能沒有

%(filename)s:調用日誌輸出函數的模塊的文件名

%(module)s:調用日誌輸出函數的模塊名

%(funcName)s:調用日誌輸出函數的函數名

%(lineno)d:調用日誌輸出函數的語句所在的代碼行

%(created)f:當前時間,用UNIX標準的表示時間的浮 點數表示

%(relativeCreated)d:輸出日誌信息時的,自Logger創建以 來的毫秒數

%(asctime)s:字元串形式的當前時間。預設格式是 “2003-07-08 16:49:45,896”。逗號後面的是毫秒

%(thread)d:線程ID。可能沒有

%(threadName)s:線程名。可能沒有

%(process)d:進程ID。可能沒有

%(message)s:用戶輸出的消息

#在settings配置文件裡面配置

LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        '格式1': { #格式對象名字 
            'format': '%(asctime)s %(name)s %(filename)s:%(lineno)d %(levelname)s:%(message)s'   #參數     
        },
        '格式2': { #格式對象名字
            'format': '%(asctime)s :%(message)s' #參數
        },
    },
    'filters': {},
    'handlers': {
        '屏幕': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 列印到屏幕
            'formatter': '格式2'
        },
        '文件': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': '格式1',
            'filename': DESC_dir,
            'encoding': 'utf-8',
        },
    },
    'loggers': {
        # '交易日誌': {
        #     'handlers': ['屏幕','文件'],
        #     'level': 'DEBUG',
        #     'propagate': False,
        # },

        '': {    #不寫名字找不到的話就指定這個
            'handlers': ['屏幕','文件'],
            'level': 'DEBUG',
            'propagate': False,
        },

    },
}

#在lib的common下重寫log方法
import logging.config
from conf import settings
logging.config.dictConfig(settings.LOGGING_DIC)#指定配置文件的字典

def log(msg,name,level='info'): #msg傳進來的文字,name=logger對象名字 level等級

    logger = logging.getLogger(name)   #獲取logger對象名字 拿著這個名字去配置文件尋找找不到用沒名字那個
    if level == 'info':
        logger.info(msg)  #調方法
    elif level == 'debug':
        logging.debug(msg)
    elif level == 'warn':
        logger.warning(msg)
    elif level == 'error':
        logger.error(msg)
    elif level == 'critical':
        logger.critical(msg)

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這不是聖誕節快到了,準備讓讓女朋友開心開心,也算是親手做的,稍稍花了點心思。 話不多說,咱們直接來展示吧,學會了趕緊畫給你的那個她吧! 本文分為兩個大塊,我們先來試試畫聖誕樹。 聖誕樹 效果展示 代碼展示 導入模塊 import turtle as t from turtle import * im ...
  • 本文主要介紹Java8新特性之Optional類,分別介紹了獲取對象的3個方法、獲取數值的3個方法、處理數值的2個方法、映射數值的1個方法以及實際應用。 ...
  • Java18(2022.3) 將 UTF-8 指定為標準 Java API 的預設字元集 提供支持靜態文件的最小 Web 伺服器命令行工具jwebserver 定義了一個全新的 SPI(service-provider interface),用於主要名稱和地址的解析 棄用 Finalization ...
  • 微信(WeChat)是騰訊公司於2011年1月21日推出的一款社交軟體,8年時間微信做到日活10億,日消息量450億。在此期間微信也推出了不少的功能如:“搖一搖”、“漂流瓶”、“朋友圈”、“附近的人”、“公眾平臺”、“小程式”等等,涵蓋了我們生活的方方面面,微信正在慢慢踐行著他們的口號:微信,是一種 ...
  • C++11 函數對象的升級版=>lambda表達式 函數對象的缺點: 使用在泛型演算法,參數傳遞, 比較性質/自定義操作 優先順序隊列, 需要專門定義出一個類 //lambda表達式語法: //[捕獲外部變數](形參列表)->返回值{操作代碼} auto func1=[]()->void{cout<<" ...
  • 主角:takewhile 判斷序列中元素是否為偶數,奇數則終止 這是我們最常用的一種方式,其實沒必要這麼複雜 1 a = [4, 6, 7, 3] 2 3 4 def judge_is_even(item): 5 if item % 2 == 0: 6 return True 7 return Fa ...
  • 1 編譯器分類 Java的編譯過程:將源代碼轉化成機器可執行的二進位代碼。實際上,編譯過程,是分階段進行的,由此產生了不同的編譯器。 編譯器分類: | 類別 | 工作內容 | 代表 | | | | | | 前端編譯器 | 把源代碼轉變成位元組碼 | JDK的Javac、Eclipse編譯器(ECJ) ...
  • bind1st和bind2nd只能用於二元函數對象 c++11 bind綁定器 返回的結果還是個函數對象 std::bind函數定義在頭文件functional中,是一個函數模板,它就像一個函數適配器,接受一個可調用對象(callable object),生成一個新的可調用對象來“適應”原對象的參數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...