(五)python內(nèi)置庫

一、內(nèi)置庫os

1、os 概述

  • os: Operating System
  • os 模塊的常用功能
  • 跨平臺的差異

2、os 使用

  • 導(dǎo)入 os 模塊
  • 查看 os 模塊使用文檔
    • help(os)
    • dir(os)
    • import os
# 查看os模塊說明文檔
help(os)

# 查看os模塊的屬性和方法
print(dir(os))

3、os 常用方法

3.1 os 操作系統(tǒng)相關(guān)

  • os.name:獲取系統(tǒng)名稱
  • os.environ:獲取系統(tǒng)環(huán)境變量信息
  • os.getenv(‘PATH’):獲取指定名稱的環(huán)境變量信息
  • os.system():執(zhí)行系統(tǒng)指令
import os

# os.name:獲取系統(tǒng)名稱 nt代表window,posix代表linux
print(os.name)

# os.environ:獲取系統(tǒng)環(huán)境變量信息
print(os.environ)

# os.getenv('PATH'):獲取指定名稱的環(huán)境變量信息
print(os.getenv('PATH'))

# os.system():執(zhí)行系統(tǒng)指令
os.system('pwd')  # linux系統(tǒng)
print(os.system('dir'))  # windows系統(tǒng)

3.2os 目錄相關(guān)

  • os.getcwd():獲取當(dāng)前目錄
  • os.chdir():切換目錄
  • os.listdir():列出當(dāng)前目錄內(nèi)容
  • os.mkdir():創(chuàng)建空目錄
  • os.makedirs():遞歸創(chuàng)建多級目錄
  • os.rmdir():刪除空目錄
  • os.rename():重命名目錄
  • os.remove():刪除文件
"""目錄相關(guān)"""
# 獲取當(dāng)前所在目錄 get current directory
print(os.getcwd())
# 切換目錄 change directory
os.chdir('..')
# 列出當(dāng)前目錄下的所有文件
print(os.listdir())
# 創(chuàng)建空目錄
os.mkdir('new')
# 遞歸創(chuàng)建多級空目錄
os.makedirs('a/b/c')
# 刪除空目錄
os.rmdir('new')
# 重命名目錄
os.rename('a', 'a1')
# 刪除文件
os.remove('demo.txt')
  • 操作路徑

3.3 os 路徑相關(guān)

path 方法 說明
os.path.abspath(path) 返回絕對路徑
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回文件路徑
os.path.split(path) 分割路徑
os.path.join(path) 拼接路徑
os.path.exists(path) 判斷路徑是否存在
os.path.isdir(path) 判斷是否是目錄
os.path.isfile(path) 判斷是否是文件
os.path.getsize(path) 獲取文件大小

3.4 os 路徑用法實例

# 返回絕對路徑
print(os.path.abspath("./os_demo.py"))
# 返回文件名
print(os.path.basename("/Users/xiaofo/coding/pythonProject/course/os_demo.py"))
# 返回文件路徑
print(os.path.dirname("/Users/xiaofo/coding/pythonProject/course/os_demo.py"))
# 分割路徑
print(os.path.split("/Users/xiaofo/coding/pythonProject/course/os_demo.py"))
# 拼接路徑
print(os.path.join("/Users/xiaofo/coding/pythonProject/course", "os_demo.py"))
# 判斷路徑是否存在
print(os.path.exists("/Users/xiaofo/coding/pythonProject/course/os_demo.py"))
print(os.path.exists("./os_demo.py"))
# 判斷是否是目錄
print(os.path.isdir("../demos"))
# 判斷是否是文件
print(os.path.isfile("./hello.py"))
# 獲取文件大小
print(os.path.getsize("/Users/xiaofo/coding/pythonProject/course/os_demo.py"))

二、內(nèi)置庫 sys

1、sys 概述

  • 是 Python 自帶的內(nèi)置模塊
  • 是與 Python 解釋器交互的橋梁

2、sys 使用

2.1 導(dǎo)入 sys 模塊

# 導(dǎo)入sys模塊
import sys

# 查看sys模塊幫助文檔
help(sys)

# 查看sys模塊的屬性和方法
print(dir(sys))

2.2 sys 常用屬性

  • sys.version:返回 Python 解釋器版本
  • sys.platform:返回操作系統(tǒng)平臺名稱
  • sys.argv:返回外部向程序傳遞的參數(shù)
  • sys.modules:返回已導(dǎo)入的模塊信息
  • sys.path:返回導(dǎo)包的搜索路徑列表
"""sys模塊常用屬性"""
# 返回Python 解釋器版本
print(sys.version)
# 返回操作系統(tǒng)平臺名稱
print(sys.platform)
# 返回外部向程序傳遞的參數(shù)
print(sys.argv)
# 返回已導(dǎo)入的模塊信息
print(sys.modules)
print(sys.modules.keys())
# 返回導(dǎo)包的搜索路徑列表
print(sys.path)

2.3 sys 常用方法

  • sys.getdefaultencoding():獲取編碼方式
  • sys.exit():運行時退出
"""sys模塊常用方法"""
# 獲取系統(tǒng)當(dāng)前編碼
print(sys.getdefaultencoding())

# 運行時退出
sys.exit()

三、內(nèi)置庫 - 文件處理

1、IO 操作

IO操作

2、文件操作步驟

  • 打開文件
  • 操作文件:讀/寫內(nèi)容
  • 關(guān)閉文件(讀寫完成,要及時的關(guān)閉)

2.1 open 方法

def open(file, mode='r', buffering=None, 
encoding=None, errors=None, newline=None, 
closefd=True):

3、文件讀寫模式

文件打開模式 描述
r 以只讀模式打開文件,并將文件指針指向文件頭;如果文件不存在會報錯
w 以只寫模式打開文件,并將文件指針指向文件頭;如果文件存在則將其內(nèi)容清空,如果文件不存在則創(chuàng)建
a 以只追加可寫模式打開文件,并將文件指針指向文件尾部;如果文件不存在則創(chuàng)建
r+ 在r的基礎(chǔ)上增加了可寫功能
w+ 在w的基礎(chǔ)上增加了可讀功能
a+ 在a的基礎(chǔ)上增加了可讀功能
b 讀寫二進制文件(默認是t,表示文本),需要與上面幾種模式搭配使用,如ab,wb,ab+(POSIX系統(tǒng),包括Linux都會忽略該字符)

3.1 實戰(zhàn)1

# 第一步:(以只讀模式)打開文件
f = open('data.txt', 'r', encoding='utf-8')  

# 第二步:讀取文件內(nèi)容
print(f.read())

# 第三步:關(guān)閉文件
f.close()

4、讀操作

方法 描述
read() 一次讀取文件所有內(nèi)容,返回一個str
read(size) 每次最多讀取指定長度的內(nèi)容,返回一個str;在python2中size指定的是字節(jié)長度,在python3中size指定的是字符長度
readlines() 一次讀取文件所有內(nèi)容,按行返回一個list
readline() 每次只讀取一行內(nèi)容

忘記關(guān)閉文件的危害

  • 打開文件達到一定數(shù)量, 將會導(dǎo)致打開失敗
  • 占用內(nèi)存空間,非常浪費資源
  • 會導(dǎo)致系統(tǒng)自動回收資源,而丟失數(shù)據(jù)

4.1 with 用法

with open('data.txt', 'r', encoding='utf-8') as f:
    print(f.read())
print(f.closed)   ## 查看關(guān)閉狀態(tài)

4.2讀操作實戰(zhàn)

  • 讀取指定長度的內(nèi)容
  • 讀取文件中的一行
  • 遍歷打印文件中的每一行

4.3寫操作實戰(zhàn)

  • mode=“w+”, 讀寫權(quán)限,會新建文件,清空內(nèi)容再寫入
  • mode=“r+”, 讀寫權(quán)限,替換原來的內(nèi)容
  • mode=“a+”, 讀寫權(quán)限,追加內(nèi)容

5、總結(jié)

  • 使用 with 方法,會自動完成關(guān)閉操作
  • 通過 python 封裝的 API,可以實現(xiàn)讀,寫,追加操作
  • 文件打開要使用utf-8的編碼格式(以免中文出現(xiàn)亂碼)

四、內(nèi)置庫 - 科學(xué)計算

了解 math 函數(shù)

math 函數(shù),python 提供的內(nèi)置數(shù)學(xué)類函數(shù)庫,包含了很多數(shù)學(xué)公式。
比如冪函數(shù)運算,三角函數(shù),高等函數(shù)運算等。

1、math 函數(shù)操作

  • 數(shù)字常數(shù)
  • 數(shù)論與表示函數(shù)
  • 冪對數(shù)函數(shù)
  • 三角對數(shù)函數(shù)
  • 高等特殊函數(shù)

1.1數(shù)字常量

常數(shù) 數(shù)學(xué)表示 描述
math.pi π 圓周率,值為3.1415926535…
math.e e 自然對數(shù),值為2.7182818…
math.inf 正無窮大,負無窮-math.inf
math.nan NAN 非數(shù)字 NAN(Not a Number)

1.2 數(shù)論與表示函數(shù)

image.png

1.3 冪函數(shù)與對數(shù)函數(shù)

1.4 三角函數(shù)

1.5 高等特殊函數(shù)

image.png

1.6 實戰(zhàn)練習(xí)

  • 常量
  • 數(shù)論與表示函數(shù)(ceil, floor)
  • 冪函數(shù)與對數(shù)函數(shù) (pow(), sqrt())

實例

天天向上的力量

一年365天,以第1天的能力值為基數(shù),記為1.0,
當(dāng)努力學(xué)習(xí)時,能力值相比前一天提高1%,
當(dāng)沒有學(xué)習(xí)時能力值相比前一天下降1%。
(每天努力和每天放任,一年下來的能力值相差多少呢? )

五、日期與時間處理

目錄

  • 獲取當(dāng)前日期/獲取特定時間
  • datetime 與 timestamp 時間戳互轉(zhuǎn)
  • datetime 與 str 互轉(zhuǎn)
  • 實戰(zhàn)練習(xí)

工作中應(yīng)用

  • 作為日志信息的內(nèi)容輸出
  • 計算某個功能的執(zhí)行時間
  • 用日期命名一個日志文件的名稱
  • 生成隨機數(shù)(時間是不會重復(fù)的)

python 中處理時間的模塊

  • time
  • datetime
  • calendar

常見的時間表示形式

  • 時間戳
  • 格式化的時間字符串

datetime 常用的類

  • datetime (from datetime import datetime) 時間日期相關(guān)
  • timedelta (from datetime import timedelta) 計算兩個時間的時間差
  • timezone (from datetime import timezone) 時區(qū)相關(guān)

練習(xí)1 - 獲取當(dāng)前日期和時間

import datetime
now = datetime.datetime.now()

練習(xí)2 - 字符串與時間互轉(zhuǎn)

s="2021-09-27 06:47:06"
# 將字符串 轉(zhuǎn)換為datetime實例
s1=datetime.datetime.strptime(s,'%Y-%m-%d %H:%M:%S')

# 時間轉(zhuǎn)成字符串
now = datetime.datetime.now()
result = now.strftime('%a, %b %d %H:%M')

# 參考鏈接:https://docs.python.org/3/library/datetime.html?highlight=strftime

練習(xí)3 - 時間戳 與時間互轉(zhuǎn)

import datetime
mtimestamp = 1632725226.129461
# 將時間戳轉(zhuǎn)成時間 
s = datetime.datetime.fromtimestamp(mtimestamp)
# 將時間轉(zhuǎn)成時間戳
print(s.timestamp())

實例

寫一段代碼,生成一個以時間命名的日志文件。
并向日志文件中寫入日志數(shù)據(jù)。

六、內(nèi)置庫 json

JSON

  • JSON 是用于存儲和交換數(shù)據(jù)的語法,是一種輕量級的數(shù)據(jù)交換格式。
  • 使用場景
    • 接口數(shù)據(jù)傳輸
    • 序列化
    • 配置文件

JSON 結(jié)構(gòu)

  • 鍵值對形式
  • 數(shù)組形式
{
    "language": [
        {
            "name": "python",
            "url": "https://www.python.org/"
        },
        {
            "name": "java",
            "url": "https://www.java.com/zh-CN/"
        }
    ]
}

Python 與 JSON 數(shù)據(jù)類型對應(yīng)

python JSON 說明
dict object 字典
list,tuple array 序列
str string 字符串
int,float number 數(shù)字類型
True true 布爾值True
False false 布爾值False
None null 空值

json 庫

  • 可以從字符串或文件中解析 JSON
  • 該庫解析 JSON 后將其轉(zhuǎn)為 Python 字典或者列表

常用方法

  • dumps():將 Python 對象編碼成 JSON 字符串
  • loads():解碼 JSON 數(shù)據(jù),該函數(shù)返回 Python 對象
  • dump(): Python 對象編碼,并將數(shù)據(jù)寫入 json 文件中
  • load():從 json 文件中讀取數(shù)據(jù)并解碼為 Python 對象
import json

# 定義 python 結(jié)構(gòu)
data = [{'a': 1, 'b': '2', 'c': True, 'd': False, 'e': None }]   

# 將 python 對象編碼為 JSON 字符串
json_data = json.dumps(data)
# 將 JSON 字符串解碼為 python 對象
python_data = json.loads(json_data)
# 寫入 JSON 數(shù)據(jù),在代碼當(dāng)前目錄生成一個 data.json 的文件
with open('data.json', 'w') as f:    
     json.dump(data, f)   
# 讀取數(shù)據(jù),讀取 json 文件并解碼成 python 對象
with open('data.json', 'r') as f:
     data = json.load(f)

dumps 常用參數(shù)

  • indent:根據(jù)數(shù)據(jù)格式縮進顯示,默認為 None,沒有縮進
  • ensure_ascii:對中文使用 ASCII 編碼,默認為 True
import json

data = {
    'a': 1, 
    'b': '霍格沃茲', 
    'c': True, 
    'd': False, 
    'e': None }

python_data = json.dumps(data, indent=4, ensure_ascii=False)
print(python_data)

七、內(nèi)置庫 re

什么是正則表達式

  • 正則表達式就是記錄文本規(guī)則的代碼
  • 可以查找操作符合某些復(fù)雜規(guī)則的字符串

使用場景

  • 處理字符串
  • 處理日志

在 python 中使用正則表達式

  • 把正則表達式作為模式字符串
  • 正則表達式可以使用原生字符串來表示
  • 原生字符串需要在字符串前方加上 r'string'
# 匹配字符串是否以 hogwarts_ 開頭

r'hogwart_\w+'

使用 re 模塊實現(xiàn)正則表達式操作

正則表達式對象轉(zhuǎn)換

  • compile():將字符串轉(zhuǎn)換為正則表達式對象
  • 需要多次使用這個正則表達式的場景
import re

'''
prog:正則對象,可以直接調(diào)用匹配、替換、分割的方法,不需要再傳入正則表達式
pattern:正則表達式
'''

prog = re.compile(pattern)

匹配字符串

  • match():從字符串的開始處進行匹配
  • search():在整個字符串中搜索第一個匹配的值
  • findall():在整個字符串中搜索所有符合正則表達式的字符串,返回列表
import re

'''
pattern: 正則表達式
string: 要匹配的字符串
flags: 可選,控制匹配方式
    - A:只進行 ASCII 匹配
    - I:不區(qū)分大小寫
    - M:將 ^ 和 $ 用于包括整個字符串的開始和結(jié)尾的每一行
    - S:使用 (.) 字符匹配所有字符(包括換行符)
    - X:忽略模式字符串中未轉(zhuǎn)義的空格和注釋
'''

re.match(pattern, string, [flags])
re.search(pattern, string, [flags])
re.findall(pattern, string, [flags])

替換字符串

  • sub():實現(xiàn)字符串替換
import re

'''
pattern:正則表達式
repl:要替換的字符串
string:要被查找替換的原始字符串
count:可選,表示替換的最大次數(shù),默認值為 0,表示替換所有匹配
flags:可選,控制匹配方式
'''

re.sub(pattern, repl, string, [count], [flags])

分割字符串

  • split():根據(jù)正則表達式分割字符串,返回列表
import re

'''
pattern:正則表達式
string:要匹配的字符串
maxsplit:可選,表示最大拆分次數(shù)
flags:可選,控制匹配方式
'''

re.split(pattern, string, [maxsplit], [flags])

八、內(nèi)置庫多線程threding

九、內(nèi)置庫pythonlogging

日志作用

  • 調(diào)試
  • 輔助定位問題
  • 數(shù)據(jù)分析

日志的級別

級別 何時使用
DEBUG 細節(jié)信息,僅當(dāng)診斷問題時適用
INFO 確認程序按預(yù)期進行
WARNING 表明有已經(jīng)或即將發(fā)生的意外(例如:磁盤空間不足)。程序仍按預(yù)期進行。
ERROR 由于嚴重的問題,程序的某些功能已經(jīng)不能正常執(zhí)行
CRITICAL 嚴重的錯誤,表明程序已不能繼續(xù)執(zhí)行

日志的用法

https://docs.python.org/zh-cn/3/howto/logging.html

函數(shù) 說明
logging.debug(msg, *args, **kwargs) 創(chuàng)建一條嚴重級別為DEBUG的日志記錄
logging.info(msg, *args, **kwargs) 創(chuàng)建一條嚴重級別為INFO的日志記錄
logging.warning(msg, *args, **kwargs) 創(chuàng)建一條嚴重級別為WARINING的日志記錄
logging.error(msg, *args, **kwargs) 創(chuàng)建一條嚴重級別為ERROR的日志記錄
logging.critical(msg, *args, **kwargs) 創(chuàng)建一條嚴重級別為CRITICAL的日志記錄
logging.log(msg, *args, **kwargs) 創(chuàng)建一條嚴重級別為level的日志記錄
logging.basicConfig( **kwargs) 對root logger進行一次配置

設(shè)置日志的級別

logging.basicConfig(level=logging.INFO)

保存日志到文件

logging.basicConfig(filename='myapp.log', level=logging.INFO)

設(shè)置時間格式

logging.basicConfig(filename='myapp.log', level=logging.INFO,format='%(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)', datefmt='%m/%d/%Y %I:%M:%S %p')

python 日志進階

組件 說明
loggers 提供應(yīng)用程序代碼直接使用的接口
handles 用于將日志記錄發(fā)送到指定的目的位置
filters 提供更細粒度的日志過濾功能,用于決定哪些日志記錄將會被輸出(其它的日志記錄將會被忽略)
formatters 用于控制日志信息的最終輸出格式

python 日志記錄流程

python 日志定義

官網(wǎng):https://docs.python.org/zh-cn/3/howto/logging.html

import logging
import os
# create logger 創(chuàng)建一個logger 記錄器
logger = logging.getLogger(os.path.basename(__file__))
logger.setLevel(logging.DEBUG)
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
# create formatter
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# add formatter to ch
ch.setFormatter(formatter)
# add ch to logger
logger.addHandler(ch)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')

封裝日志公共函數(shù)

https://ceshiren.com/t/topic/13564

日志配置文件

https://ceshiren.com/t/topic/13564
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容