一、內(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