Python訓練營打卡——DAY24(2025.5.13)

目錄

一、元組

1. 通俗解釋

2. 元組的特點

3. 元組的創建

4. 元組的常見用法

二、可迭代對象

1. 定義

2. 示例

3. 通俗解釋

三、OS 模塊

1. 通俗解釋

2. 目錄樹

四、作業

1. 準備工作

2.?實戰代碼示例?

3. 重要概念解析


一、元組

  • 是什么??:一種??不可修改的有序數據容器??,類似列表,但創建后元素不能增刪改。
  • ??特點??:
    • ? 元素不可變,適合保存固定參數(如模型輸入形狀、超參數組合)。
    • ? 可包含不同類型數據(如數字、字符串、列表)。
  • ??應用場景??:
    • 深度學習庫(如PyTorch/TensorFlow)中表示形狀:input_shape = (224, 224, 3)
    • 機器學習流水線(Pipeline)中捆綁步驟名稱和操作:
pipeline = Pipeline([('scaler', StandardScaler()), ('clf', LogisticRegression())])

1. 通俗解釋

元組(Tuple)—— 不能改的“固定清單”?

  • 像啥??:想象你寫了一張購物清單,但用膠水封死了,不能涂改、不能加東西。這就是元組!
  • ??有啥用??:
    • ??防手滑??:比如深度學習中,模型的輸入尺寸(比如圖片必須是 224x224),一旦設定就不能中途亂改,用元組存著最安全。
    • ??捆綁定死??:比如機器學習流水線(Pipeline)中,把步驟名稱(如“縮放數據”)和對應的工具(如StandardScaler())綁在一起,防止步驟被篡改。
  • ??舉個栗子??

2. 元組的特點

  1. 有序,可以重復,這一點和列表一樣
  2. 元組中的元素不能修改,這一點非常重要,深度學習場景中很多參數、形狀定義好了確保后續不能被修改。

很多流行的 ML/DL 庫(如 TensorFlow, PyTorch, NumPy)在其 API 中都廣泛使用了元組來表示形狀、配置等。

可以看到,元組最重要的功能是在列表之上,增加了不可修改這個需求


3. 元組的創建

my_tuple1 = (1, 2, 3)
my_tuple2 = ('a', 'b', 'c')
my_tuple3 = (1, 'hello', 3.14, [4, 5]) # 可以包含不同類型的元素
print(my_tuple1)
print(my_tuple2)
print(my_tuple3)
(1, 2, 3)
('a', 'b', 'c')
(1, 'hello', 3.14, [4, 5])
# 可以省略括號
my_tuple4 = 10, 20, 'thirty' # 逗號是關鍵
print(my_tuple4)
print(type(my_tuple4)) # 看看它的類型
(10, 20, 'thirty')
<class 'tuple'>
# 創建空元組
empty_tuple = ()
# 或者使用 tuple() 函數
empty_tuple2 = tuple()
print(empty_tuple)
print(empty_tuple2)
()
()

4. 元組的常見用法

# 元組的索引
my_tuple = ('P', 'y', 't', 'h', 'o', 'n')
print(my_tuple[0])  # 第一個元素
print(my_tuple[2])  # 第三個元素
print(my_tuple[-1]) # 最后一個元素
P
t
n
# 元組的切片
my_tuple = (0, 1, 2, 3, 4, 5)
print(my_tuple[1:4])  # 從索引 1 到 3 (不包括 4)
print(my_tuple[:3])   # 從開頭到索引 2
print(my_tuple[3:])   # 從索引 3 到結尾
print(my_tuple[::2])  # 每隔一個元素取一個
(1, 2, 3)
(0, 1, 2)
(3, 4, 5)
(0, 2, 4)
# 元組的長度獲取
my_tuple = (1, 2, 3)
print(len(my_tuple))
3

管道工程中pipeline類接收的是一個包含多個小元組的 列表 作為輸入。

可以這樣理解這個結構:

  1. 列表 []: 定義了步驟執行的先后順序。Pipeline 會按照列表中的順序依次處理數據。之所以用列表,是未來可以對這個列表進行修改。
  2. 元組 (): 用于將每個步驟的名稱和處理對象捆綁在一起。名稱用于在后續訪問或設置參數時引用該步驟,而對象則是實際執行數據轉換或模型訓練的工具。固定了操作名+操作

不用字典因為字典是無序的。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score# 1. 加載數據
iris = load_iris()
X = iris.data
y = iris.target# 2. 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 3. 構建管道
# 管道按順序執行以下步驟:
#    - StandardScaler(): 標準化數據(移除均值并縮放到單位方差)
#    - LogisticRegression(): 邏輯回歸分類器
pipeline = Pipeline([('scaler', StandardScaler()),('logreg', LogisticRegression())
])# 4. 訓練模型
pipeline.fit(X_train, y_train)# 5. 預測
y_pred = pipeline.predict(X_test)# 6. 評估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"模型在測試集上的準確率: {accuracy:.2f}")
模型在測試集上的準確率: 1.00

二、可迭代對象

1. 定義

  • 是什么??:能用?for?循環遍歷的對象。
  • ??常見類型??:
    類型遍歷內容示例
    列表元素for num in [1, 2, 3]:
    字典鍵(默認)或鍵值對for key, value in dict.items():
    字符串每個字符for char in "hello":
    文件路徑目錄樹(用os.walk()遍歷數據集文件夾中的圖片

可迭代對象 (Iterable) 是 Python 中一個非常核心的概念。簡單來說,一個可迭代對象就是指那些能夠一次返回其成員(元素)的對象,讓你可以在一個循環(比如 for 循環)中遍歷它們。

Python 中有很多內置的可迭代對象,目前我們見過的類型包括:

  • 序列類型 (Sequence Types):

    • list?(列表)
    • tuple?(元組)
    • str?(字符串)
    • range?(范圍)
  • 集合類型 (Set Types):

    • set?(集合)
  • 字典類型 (Mapping Types):

    • dict?(字典) - 迭代時返回鍵 (keys)
  • 文件對象 (File objects)

  • 生成器 (Generators)

  • 迭代器 (Iterators) 本身


2. 示例

# 列表 (list)
print("迭代列表:")
my_list = [1, 2, 3, 4, 5]
for item in my_list:print(item)
迭代列表:
1
2
3
4
5
# 元組 (tuple)
print("迭代元組:")
my_tuple = ('a', 'b', 'c')
for item in my_tuple:print(item)
迭代元組:
a
b
c
# 字符串 (str)
print("迭代字符串:")
my_string = "hello"
for char in my_string:print(char)
迭代字符串:
h
e
l
l
o
# range (范圍)
print("迭代 range:")
for number in range(5):  # 生成 0, 1, 2, 3, 4print(number)
迭代 range:
0
1
2
3
4
# 集合類型 (Set Types)# 集合 (set) - 注意集合是無序的,所以每次迭代的順序可能不同
print("迭代集合:")
my_set = {3, 1, 4, 1, 5, 9}
for item in my_set:print(item)
迭代集合:
1
3
4
5
9
# 字典 (dict) - 默認迭代時返回鍵 (keys)
print("迭代字典 (默認迭代鍵):")
my_dict = {'name': 'Alice', 'age': 30, 'city': 'Singapore'}
for key in my_dict:print(key)
迭代字典 (默認迭代鍵):
name
age
city
# 迭代字典的值 (values)
print("迭代字典的值:")
for value in my_dict.values():print(value)
迭代字典的值:
Alice
30
Singapore
# 迭代字典的鍵值對 (items)
print("迭代字典的鍵值對:")
for key, value in my_dict.items(): # items方法很好用print(f"Key: {key}, Value: {value}")
迭代字典的鍵值對:
Key: name, Value: Alice
Key: age, Value: 30
Key: city, Value: Singapore

3. 通俗解釋

可迭代對象(Iterable)—— “能一個一個拿的東西”??

  • ??像啥??:就像你的書包,里面有很多本書,你可以一本一本拿出來看。能讓你“一個一個拿”的東西,都叫可迭代對象。
  • ??常見的“書包”類型??:
    • ??列表/元組??:直接拿里面的每個元素(比如數字、文字)。
    • ??字符串??:一個一個拿字符(比如“hello”拆成 h, e, l, l, o)。
    • ??字典??:默認拿的是鑰匙(key),但也可以同時拿鑰匙和對應的值(像查字典時,先找詞條,再看解釋)。
  • ??舉個栗子:
# 遍歷字典,拿“鑰匙”和“值”
params = {"學習率": 0.01, "訓練輪次": 100}
for key, value in params.items():print(f"參數 {key} 的值是 {value}")
# 輸出:
# 參數 學習率 的值是 0.01
# 參數 訓練輪次 的值是 100

三、OS 模塊

1. 通俗解釋

OS模塊 —— 幫你“整理電腦文件”的工具包??

  • ??像啥??:你電腦里有一堆亂糟糟的文件夾和文件,OS模塊就像你的私人助手,幫你自動整理。

三大神器:

①路徑拼接??:避免手寫路徑出錯(比如Windows用\,Mac用/),自動幫你處理。

# 把路徑拼成 "數據/圖片/貓"
path = os.path.join("數據", "圖片", "貓")

??②文件夾遍歷??:一鍵掃描某個文件夾下的所有文件(包括子文件夾),適合批量處理數據。

# 遍歷數據集文件夾里的所有圖片
for root, dirs, files in os.walk("數據集"):for file in files:if file.endswith(".jpg"):print(f"找到圖片:{os.path.join(root, file)}")

環境變量??:查看或設置系統參數(比如告訴程序用哪塊GPU)。

# 設置使用第一塊GPU
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

隨著深度學習項目變得越來越大、數據量越來越多、代碼結構越來越復雜,你會越來越頻繁地用到 os 模塊來管理文件、目錄、路徑,以及進行一些基本的操作系統交互。雖然深度學習的核心在于模型構建和訓練,但數據和模型的有效管理是項目成功的關鍵環節,而 os 模塊為此提供了重要的工具。

在簡單的入門級項目中,你可能只需要使用 pd.read_csv() 加載數據,而不需要直接操作文件路徑。但是,當你開始處理圖像數據集、自定義數據加載流程、保存和加載復雜的模型結構時,os 模塊就會變得非常有用。

好的代碼組織和有效的文件管理是大型深度學習項目的基石。os 模塊是實現這些目標的重要組成部分。

import os
# os是系統內置模塊,無需安裝

獲取當前工作目錄


os.getcwd() # get current working directory 獲取當前工作目錄的絕對路徑
'c:\\Users\\PC\\Desktop\\python訓練營'

獲取當前工作目錄下的文件列表

os.listdir() # list directory 獲取當前工作目錄下的文件列表
['day24 元組和OS模塊.ipynb', '演示1']

#    我們使用 r'' 原始字符串,這樣就不需要寫雙反斜杠 \\,因為\會涉及到轉義問題
path_a = r'C:\Users\YourUsername\Documents' # r''這個寫法是寫給python解釋器看,他只會讀取引號內的內容,不用在意r的存在會不會影響拼接
path_b = 'MyProjectData'
file = 'results.csv'# 使用 os.path.join 將它們安全地拼接起來,os.path.join 會自動使用 Windows 的反斜杠 '\' 作為分隔符
file_path = os.path.join(path_a , path_b, file)file_path
'C:\\Users\\YourUsername\\Documents\\MyProjectData\\results.csv'

環境變量方法

# os.environ 表現得像一個字典,包含所有的環境變量
os.environ
environ{'ALLUSERSPROFILE': 'C:\\ProgramData','AMOSAPP': 'C:\\Users\\PC\\AppData\\Local\\AmosDevelopment\\Amos\\26','AMOSDOCS': 'C:\\Users\\PC\\Documents\\AmosDevelopment\\Amos\\26','AMOSEXAMPLES': 'C:\\Users\\PC\\AppData\\Local\\AmosDevelopment\\Amos\\26\\Examples\\English','AMOSLOGS': 'C:\\Users\\PC\\AppData\\Local\\AmosDevelopment\\Amos\\26\\Logs','AMOSPLUGINS': 'C:\\Users\\PC\\AppData\\Local\\AmosDevelopment\\Amos\\26\\Plugins','AMOSPROGRAM': 'D:\\Jupyter\\SEM\\Amos26','AMOSTEMPLATES': 'C:\\Users\\PC\\AppData\\Local\\AmosDevelopment\\Amos\\26\\Templates\\English','AMOSTUTORIAL': 'C:\\Users\\PC\\AppData\\Local\\AmosDevelopment\\Amos\\26\\Tutorial\\English','APPDATA': 'C:\\Users\\PC\\AppData\\Roaming','CHROME_CRASHPAD_PIPE_NAME': '\\\\.\\pipe\\crashpad_2824_TQDHDSUOXXPVVCJP','COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files','COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files','COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files','COMPUTERNAME': 'DESKTOP-N2RLOJJ','COMSPEC': 'C:\\WINDOWS\\system32\\cmd.exe','CONDA_DEFAULT_ENV': 'vs','CONDA_EXE': 'D:\\Anaconda\\Scripts\\conda.exe','CONDA_PREFIX': 'D:\\Anaconda\\envs\\vs','CONDA_PROMPT_MODIFIER': '(vs) ','CONDA_PYTHON_EXE': 'D:\\Anaconda\\python.exe','CONDA_ROOT': 'D:\\Anaconda','CONDA_SHLVL': '1','CUDA_PATH': 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.3','CUDA_PATH_V11_3': 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.3','CUDA_PATH_V12_1': 'C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v12.1','CUDA_VISIBLE_DEVICES': '0','DRIVERDATA': 'C:\\Windows\\System32\\Drivers\\DriverData','ELECTRON_RUN_AS_NODE': '1','FPS_BROWSER_APP_PROFILE_STRING': 'Internet Explorer','FPS_BROWSER_USER_PROFILE_STRING': 'Default','HF_HOME': 'E:\\cache\\huggingface_cache','HOMEDRIVE': 'C:','HOMEPATH': '\\Users\\PC','JPY_INTERRUPT_EVENT': '4256','LOCALAPPDATA': 'C:\\Users\\PC\\AppData\\Local','LOGONSERVER': '\\\\DESKTOP-N2RLOJJ','NUMBER_OF_PROCESSORS': '24','NVCUDASAMPLES11_3_ROOT': 'C:\\ProgramData\\NVIDIA Corporation\\CUDA Samples\\v11.3','NVCUDASAMPLES_ROOT': 'C:\\ProgramData\\NVIDIA Corporation\\CUDA Samples\\v11.3','NVTOOLSEXT_PATH': 'C:\\Program Files\\NVIDIA Corporation\\NvToolsExt\\','OLLAMA_MODELS': 'E:\\ollamamodels','ONEDRIVE': 'C:\\Users\\PC\\OneDrive','ORIGINAL_XDG_CURRENT_DESKTOP': 'undefined','OS': 'Windows_NT','PATH': 'd:\\Anaconda\\envs\\vs;D:\\Anaconda\\envs\\vs;D:\\Anaconda\\envs\\vs\\Library\\mingw-w64\\bin;D:\\Anaconda\\envs\\vs\\Library\\usr\\bin;D:\\Anaconda\\envs\\vs\\Library\\bin;D:\\Anaconda\\envs\\vs\\Scripts;D:\\Anaconda\\envs\\vs\\bin;D:\\Anaconda\\condabin;C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;c:\\Users\\PC\\AppData\\Local\\Programs\\cursor\\resources\\app\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0;C:\\Windows\\System32\\OpenSSH;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Program Files\\Bandizip;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0;C:\\WINDOWS\\System32\\OpenSSH;C:\\Program Files (x86)\\PDFtk Server\\bin;E:\\NEMA\\JRE\\bin\\client;D:\\Git\\cmd;C:\\Program Files (x86)\\Common Files\\Business Objects\\3.0\\bin;C:\\Program Files (x86)\\Common Files\\Business Objects\\3.0\\crystalreportviewers11\\ActiveXControls;D:\\Anaconda;D:\\Anaconda\\Scripts;D:\\Anaconda\\Library\\bin;C:\\Program Files\\dotnet;C:\\Program Files\\NVIDIA Corporation\\Nsight Compute 2021.1.0;C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA;C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.3\\lib\\x64;C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.3\\bin;C:\\Program Files\\NVIDI;D:\\soft_uncode\\Tesseract-OCR;D:\\soft_uncode\\微信web開發者工具\\dll;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0;C:\\WINDOWS\\System32\\OpenSSH;C:\\Program Files\\Google\\Chrome\\Application;C:\\Program Files\\NVIDIA Corporation\\NVIDIA app\\NvDLISR;D:\\soft_code\\Graphviz\\bin;D:\\soft_uncode\\pcsuite;d:\\soft_code\\Trae CN\\bin;D:\\vscode\\Microsoft VS Code\\bin;D:\\neo4jaa\\neo4j-community-5.12.0\\bin;C:\\Program Files\\Java\\jdk-21\\bin;C:\\Users\\PC\\AppData\\Local\\Microsoft\\WindowsApps','PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC','PROCESSOR_ARCHITECTURE': 'AMD64','PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 151 Stepping 2, GenuineIntel','PROCESSOR_LEVEL': '6','PROCESSOR_REVISION': '9702','PROGRAMDATA': 'C:\\ProgramData','PROGRAMFILES': 'C:\\Program Files','PROGRAMFILES(X86)': 'C:\\Program Files (x86)','PROGRAMW6432': 'C:\\Program Files','PROMPT': '(vs) $P$G','PSMODULEPATH': '%ProgramFiles%\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules','PUBLIC': 'C:\\Users\\Public','PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING': '1','PYTHONIOENCODING': 'utf-8','PYTHONUNBUFFERED': '1','PYTHONUTF8': '1','PYTHON_FROZEN_MODULES': 'on','SSL_CERT_FILE': 'D:\\Anaconda\\envs\\vs\\Library\\ssl\\cacert.pem','SYSTEMDRIVE': 'C:','SYSTEMROOT': 'C:\\WINDOWS','TEMP': 'C:\\Users\\PC\\AppData\\Local\\Temp','TESSDATA_PREFIX': 'D:\\soft_uncode\\Tesseract-OCR\\','TMP': 'C:\\Users\\PC\\AppData\\Local\\Temp','USERDOMAIN': 'DESKTOP-N2RLOJJ','USERDOMAIN_ROAMINGPROFILE': 'DESKTOP-N2RLOJJ','USERNAME': 'PC','USERPROFILE': 'C:\\Users\\PC','VSCODE_CODE_CACHE_PATH': 'C:\\Users\\PC\\AppData\\Roaming\\Code\\CachedData\\19e0f9e681ecb8e5c09d8784acaa601316ca4571','VSCODE_CRASH_REPORTER_PROCESS_TYPE': 'extensionHost','VSCODE_CWD': 'C:\\Users\\PC\\Desktop\\vscode工作區','VSCODE_DOTNET_INSTALL_TOOL_ORIGINAL_HOME': 'undefined','VSCODE_ESM_ENTRYPOINT': 'vs/workbench/api/node/extensionHostProcess','VSCODE_HANDLES_UNCAUGHT_ERRORS': 'true','VSCODE_IPC_HOOK': '\\\\.\\pipe\\ccdd4d73-1.100.0-main-sock','VSCODE_L10N_BUNDLE_LOCATION': 'file:///c%3A/Users/PC/.vscode/extensions/ms-ceintl.vscode-language-pack-zh-hans-1.100.2025050709/translations/extensions/vscode.json-language-features.i18n.json','VSCODE_NLS_CONFIG': '{"userLocale":"zh-cn","osLocale":"zh-cn","resolvedLanguage":"zh-cn","defaultMessagesFile":"D:\\\\vscode\\\\Microsoft VS Code\\\\resources\\\\app\\\\out\\\\nls.messages.json","languagePack":{"translationsConfigFile":"C:\\\\Users\\\\PC\\\\AppData\\\\Roaming\\\\Code\\\\clp\\\\4000923e07438a458172c6e7b57c9479.zh-cn\\\\tcf.json","messagesFile":"C:\\\\Users\\\\PC\\\\AppData\\\\Roaming\\\\Code\\\\clp\\\\4000923e07438a458172c6e7b57c9479.zh-cn\\\\19e0f9e681ecb8e5c09d8784acaa601316ca4571\\\\nls.messages.json","corruptMarkerFile":"C:\\\\Users\\\\PC\\\\AppData\\\\Roaming\\\\Code\\\\clp\\\\4000923e07438a458172c6e7b57c9479.zh-cn\\\\corrupted.info"},"locale":"zh-cn","availableLanguages":{"*":"zh-cn"},"_languagePackId":"4000923e07438a458172c6e7b57c9479.zh-cn","_languagePackSupport":true,"_translationsConfigFile":"C:\\\\Users\\\\PC\\\\AppData\\\\Roaming\\\\Code\\\\clp\\\\4000923e07438a458172c6e7b57c9479.zh-cn\\\\tcf.json","_cacheRoot":"C:\\\\Users\\\\PC\\\\AppData\\\\Roaming\\\\Code\\\\clp\\\\4000923e07438a458172c6e7b57c9479.zh-cn","_resolvedLanguagePackCoreLocation":"C:\\\\Users\\\\PC\\\\AppData\\\\Roaming\\\\Code\\\\clp\\\\4000923e07438a458172c6e7b57c9479.zh-cn\\\\19e0f9e681ecb8e5c09d8784acaa601316ca4571","_corruptedFile":"C:\\\\Users\\\\PC\\\\AppData\\\\Roaming\\\\Code\\\\clp\\\\4000923e07438a458172c6e7b57c9479.zh-cn\\\\corrupted.info"}','VSCODE_PID': '2824','WINDIR': 'C:\\WINDOWS','_CONDA_OLD_CHCP': '936','__CONDA_OPENSLL_CERT_FILE_SET': '"1"','PYDEVD_USE_FRAME_EVAL': 'NO','TERM': 'xterm-color','CLICOLOR': '1','FORCE_COLOR': '1','CLICOLOR_FORCE': '1','PAGER': 'cat','GIT_PAGER': 'cat','MPLBACKEND': 'module://matplotlib_inline.backend_inline','KMP_DUPLICATE_LIB_OK': 'True','KMP_INIT_AT_FORK': 'FALSE'}
# 使用 .items() 方法可以方便地同時獲取變量名(鍵)和變量值,之前已經提過字典的items()方法,可以取出來鍵和值
# os.environ是可迭代對象for variable_name, value in os.environ.items():# 直接打印出變量名和對應的值print(f"{variable_name}={value}")# 你也可以選擇性地打印總數
print(f"\n--- 總共檢測到 {len(os.environ)} 個環境變量 ---")
ALLUSERSPROFILE=C:\ProgramData
AMOSAPP=C:\Users\PC\AppData\Local\AmosDevelopment\Amos\26
AMOSDOCS=C:\Users\PC\Documents\AmosDevelopment\Amos\26
AMOSEXAMPLES=C:\Users\PC\AppData\Local\AmosDevelopment\Amos\26\Examples\English
AMOSLOGS=C:\Users\PC\AppData\Local\AmosDevelopment\Amos\26\Logs
AMOSPLUGINS=C:\Users\PC\AppData\Local\AmosDevelopment\Amos\26\Plugins
AMOSPROGRAM=D:\Jupyter\SEM\Amos26
AMOSTEMPLATES=C:\Users\PC\AppData\Local\AmosDevelopment\Amos\26\Templates\English
AMOSTUTORIAL=C:\Users\PC\AppData\Local\AmosDevelopment\Amos\26\Tutorial\English
APPDATA=C:\Users\PC\AppData\Roaming
CHROME_CRASHPAD_PIPE_NAME=\\.\pipe\crashpad_2824_TQDHDSUOXXPVVCJP
COMMONPROGRAMFILES=C:\Program Files\Common Files
COMMONPROGRAMFILES(X86)=C:\Program Files (x86)\Common Files
COMMONPROGRAMW6432=C:\Program Files\Common Files
COMPUTERNAME=DESKTOP-N2RLOJJ
COMSPEC=C:\WINDOWS\system32\cmd.exe
CONDA_DEFAULT_ENV=vs
CONDA_EXE=D:\Anaconda\Scripts\conda.exe
CONDA_PREFIX=D:\Anaconda\envs\vs
CONDA_PROMPT_MODIFIER=(vs) 
CONDA_PYTHON_EXE=D:\Anaconda\python.exe
CONDA_ROOT=D:\Anaconda
CONDA_SHLVL=1
CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3
CUDA_PATH_V11_3=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3
CUDA_PATH_V12_1=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1
CUDA_VISIBLE_DEVICES=0
DRIVERDATA=C:\Windows\System32\Drivers\DriverData
ELECTRON_RUN_AS_NODE=1
FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer
FPS_BROWSER_USER_PROFILE_STRING=Default
HF_HOME=E:\cache\huggingface_cache
HOMEDRIVE=C:
HOMEPATH=\Users\PC
JPY_INTERRUPT_EVENT=4256
LOCALAPPDATA=C:\Users\PC\AppData\Local
LOGONSERVER=\\DESKTOP-N2RLOJJ
NUMBER_OF_PROCESSORS=24
NVCUDASAMPLES11_3_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.3
NVCUDASAMPLES_ROOT=C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.3
NVTOOLSEXT_PATH=C:\Program Files\NVIDIA Corporation\NvToolsExt\
OLLAMA_MODELS=E:\ollamamodels
ONEDRIVE=C:\Users\PC\OneDrive
ORIGINAL_XDG_CURRENT_DESKTOP=undefined
OS=Windows_NT
PATH=d:\Anaconda\envs\vs;D:\Anaconda\envs\vs;D:\Anaconda\envs\vs\Library\mingw-w64\bin;D:\Anaconda\envs\vs\Library\usr\bin;D:\Anaconda\envs\vs\Library\bin;D:\Anaconda\envs\vs\Scripts;D:\Anaconda\envs\vs\bin;D:\Anaconda\condabin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;c:\Users\PC\AppData\Local\Programs\cursor\resources\app\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Bandizip;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files (x86)\PDFtk Server\bin;E:\NEMA\JRE\bin\client;D:\Git\cmd;C:\Program Files (x86)\Common Files\Business Objects\3.0\bin;C:\Program Files (x86)\Common Files\Business Objects\3.0\crystalreportviewers11\ActiveXControls;D:\Anaconda;D:\Anaconda\Scripts;D:\Anaconda\Library\bin;C:\Program Files\dotnet;C:\Program Files\NVIDIA Corporation\Nsight Compute 2021.1.0;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\lib\x64;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3\bin;C:\Program Files\NVIDI;D:\soft_uncode\Tesseract-OCR;D:\soft_uncode\微信web開發者工具\dll;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\Google\Chrome\Application;C:\Program Files\NVIDIA Corporation\NVIDIA app\NvDLISR;D:\soft_code\Graphviz\bin;D:\soft_uncode\pcsuite;d:\soft_code\Trae CN\bin;D:\vscode\Microsoft VS Code\bin;D:\neo4jaa\neo4j-community-5.12.0\bin;C:\Program Files\Java\jdk-21\bin;C:\Users\PC\AppData\Local\Microsoft\WindowsApps
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PROCESSOR_ARCHITECTURE=AMD64
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 151 Stepping 2, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=9702
PROGRAMDATA=C:\ProgramData
PROGRAMFILES=C:\Program Files
PROGRAMFILES(X86)=C:\Program Files (x86)
PROGRAMW6432=C:\Program Files
PROMPT=(vs) $P$G
PSMODULEPATH=%ProgramFiles%\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
PUBLIC=C:\Users\Public
PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING=1
PYTHONIOENCODING=utf-8
PYTHONUNBUFFERED=1
PYTHONUTF8=1
PYTHON_FROZEN_MODULES=on
SSL_CERT_FILE=D:\Anaconda\envs\vs\Library\ssl\cacert.pem
SYSTEMDRIVE=C:
SYSTEMROOT=C:\WINDOWS
TEMP=C:\Users\PC\AppData\Local\Temp
TESSDATA_PREFIX=D:\soft_uncode\Tesseract-OCR\
TMP=C:\Users\PC\AppData\Local\Temp
USERDOMAIN=DESKTOP-N2RLOJJ
USERDOMAIN_ROAMINGPROFILE=DESKTOP-N2RLOJJ
USERNAME=PC
USERPROFILE=C:\Users\PC
VSCODE_CODE_CACHE_PATH=C:\Users\PC\AppData\Roaming\Code\CachedData\19e0f9e681ecb8e5c09d8784acaa601316ca4571
VSCODE_CRASH_REPORTER_PROCESS_TYPE=extensionHost
VSCODE_CWD=C:\Users\PC\Desktop\vscode工作區
VSCODE_DOTNET_INSTALL_TOOL_ORIGINAL_HOME=undefined
VSCODE_ESM_ENTRYPOINT=vs/workbench/api/node/extensionHostProcess
VSCODE_HANDLES_UNCAUGHT_ERRORS=true
VSCODE_IPC_HOOK=\\.\pipe\ccdd4d73-1.100.0-main-sock
VSCODE_L10N_BUNDLE_LOCATION=file:///c%3A/Users/PC/.vscode/extensions/ms-ceintl.vscode-language-pack-zh-hans-1.100.2025050709/translations/extensions/vscode.json-language-features.i18n.json
VSCODE_NLS_CONFIG={"userLocale":"zh-cn","osLocale":"zh-cn","resolvedLanguage":"zh-cn","defaultMessagesFile":"D:\\vscode\\Microsoft VS Code\\resources\\app\\out\\nls.messages.json","languagePack":{"translationsConfigFile":"C:\\Users\\PC\\AppData\\Roaming\\Code\\clp\\4000923e07438a458172c6e7b57c9479.zh-cn\\tcf.json","messagesFile":"C:\\Users\\PC\\AppData\\Roaming\\Code\\clp\\4000923e07438a458172c6e7b57c9479.zh-cn\\19e0f9e681ecb8e5c09d8784acaa601316ca4571\\nls.messages.json","corruptMarkerFile":"C:\\Users\\PC\\AppData\\Roaming\\Code\\clp\\4000923e07438a458172c6e7b57c9479.zh-cn\\corrupted.info"},"locale":"zh-cn","availableLanguages":{"*":"zh-cn"},"_languagePackId":"4000923e07438a458172c6e7b57c9479.zh-cn","_languagePackSupport":true,"_translationsConfigFile":"C:\\Users\\PC\\AppData\\Roaming\\Code\\clp\\4000923e07438a458172c6e7b57c9479.zh-cn\\tcf.json","_cacheRoot":"C:\\Users\\PC\\AppData\\Roaming\\Code\\clp\\4000923e07438a458172c6e7b57c9479.zh-cn","_resolvedLanguagePackCoreLocation":"C:\\Users\\PC\\AppData\\Roaming\\Code\\clp\\4000923e07438a458172c6e7b57c9479.zh-cn\\19e0f9e681ecb8e5c09d8784acaa601316ca4571","_corruptedFile":"C:\\Users\\PC\\AppData\\Roaming\\Code\\clp\\4000923e07438a458172c6e7b57c9479.zh-cn\\corrupted.info"}
VSCODE_PID=2824
WINDIR=C:\WINDOWS
_CONDA_OLD_CHCP=936
__CONDA_OPENSLL_CERT_FILE_SET="1"
PYDEVD_USE_FRAME_EVAL=NO
TERM=xterm-color
CLICOLOR=1
FORCE_COLOR=1
CLICOLOR_FORCE=1
PAGER=cat
GIT_PAGER=cat
MPLBACKEND=module://matplotlib_inline.backend_inline
KMP_DUPLICATE_LIB_OK=True
KMP_INIT_AT_FORK=FALSE--- 總共檢測到 96 個環境變量 ---

2. 目錄樹

os.walk() 是 Python os 模塊中一個非常有用的函數,它用于遍歷(或稱“行走”)一個目錄樹。

核心功能:

os.walk(top, topdown=True, οnerrοr=None, followlinks=False) 會為一個目錄樹生成文件名。對于樹中的每個目錄(包括 top 目錄本身),它會 yield(產生)一個包含三個元素的元組 (tuple):

(dirpath, dirnames, filenames)

  1. dirpath: 一個字符串,表示當前正在訪問的目錄的路徑。
  2. dirnames: 一個列表(list),包含了 dirpath 目錄下所有子目錄的名稱(不包括 . 和 ..)。
  3. filenames: 一個列表(list),包含了 dirpath 目錄下所有非目錄文件的名稱。

示例目錄結構 (Markdown形式):

假設你的?start_directory?(當前工作目錄?.) 是?my_project,其結構如下:

my_project/
├── data/
│   ├── processed/
│   └── raw/
│       └── data1.csv
├── src/
│   ├── models/
│   │   └── model_a.py
│   └── utils.py
├── main.py
└── README.md

os.walk?的遍歷順序及輸出 (模擬):

(注意:dirnames?和?filenames?的順序可能因操作系統或文件系統而略有不同,但遍歷的?深度優先?邏輯是一致的)

--- 開始遍歷目錄: my_project ---當前訪問目錄 (dirpath): my_project子目錄列表 (dirnames): ['data', 'src']  # <--- 列出第一層子目錄文件列表 (filenames): ['main.py', 'README.md']當前訪問目錄 (dirpath): my_project/data  # <--- 深入到 data子目錄列表 (dirnames): ['processed', 'raw'] # <--- 列出 data 下的子目錄文件列表 (filenames): []當前訪問目錄 (dirpath): my_project/data/processed # <--- 深入到 processed子目錄列表 (dirnames): []文件列表 (filenames): []當前訪問目錄 (dirpath): my_project/data/raw # <--- 回溯到 data,然后深入到 raw子目錄列表 (dirnames): []文件列表 (filenames): ['data1.csv']當前訪問目錄 (dirpath): my_project/src # <--- 回溯到 my_project,然后深入到 src子目錄列表 (dirnames): ['models']文件列表 (filenames): ['utils.py']當前訪問目錄 (dirpath): my_project/src/models # <--- 深入到 models子目錄列表 (dirnames): []文件列表 (filenames): ['model_a.py']# 遍歷結束

總結:

os.walk?會首先訪問起始目錄 (my_project),然后它會選擇第一個子目錄 (data) 并深入進去,訪問?data?目錄本身,然后繼續深入它的子目錄 (processed?->?raw)。只有當?data?分支下的所有內容都被訪問完畢后,它才會回到?my_project?這一層,去訪問下一個子目錄 (src),并對?src?分支重復深度優先的探索。

它不是按層級(先訪問所有第一層,再訪問所有第二層)進行的,而是按分支深度進行的。這種策略被稱之為深度優先

import osstart_directory = os.getcwd() # 假設這個目錄在當前工作目錄下print(f"--- 開始遍歷目錄: {start_directory} ---")for dirpath, dirnames, filenames in os.walk(start_directory):print(f"  當前訪問目錄 (dirpath): {dirpath}")print(f"  子目錄列表 (dirnames): {dirnames}")print(f"  文件列表 (filenames): {filenames}")# # 你可以在這里對文件進行操作,比如打印完整路徑# print("    文件完整路徑:")# for filename in filenames:#     full_path = os.path.join(dirpath, filename)#     print(f"      - {full_path}")
--- 開始遍歷目錄: c:\Users\PC\Desktop\python訓練營 ---當前訪問目錄 (dirpath): c:\Users\PC\Desktop\python訓練營子目錄列表 (dirnames): ['演示1']文件列表 (filenames): ['day24 元組和OS模塊.ipynb']當前訪問目錄 (dirpath): c:\Users\PC\Desktop\python訓練營\演示1子目錄列表 (dirnames): ['演示文件夾2']文件列表 (filenames): ['day21 常見的降維算法.ipynb', 'day23 機器學習流水線.ipynb']當前訪問目錄 (dirpath): c:\Users\PC\Desktop\python訓練營\演示1\演示文件夾2子目錄列表 (dirnames): []文件列表 (filenames): ['main.ipynb']

介紹這個方法,是因為在你面臨云服務器時候,往往只能通過命令行和代碼塊中函數來查看,無法像電腦一樣在界面中查看,所以,這個方法可以讓你直接在代碼塊中查看。

上圖為kaggle平臺代碼提交的代碼 理解下這個函數的遍歷 以后如果這個訓練營說到大模型相關,我們還會經常和os模塊打交道


四、作業

自己電腦不同文件夾利用今天學到的知識操作下,理解下os路徑

1. 準備工作

  1. 新建一個測試文件夾(例如?C:\test_os
  2. 在里面創建子文件夾和測試文件:
    test_os/
    ├── docs/
    │   ├── report.docx
    │   └── data.xlsx
    ├── images/
    │   ├── cat.jpg
    │   └── dog.png
    └── temp/└── old_file.txt

2.?實戰代碼示例?

(1)遍歷文件夾并統計文件數量?

import os# 指定要操作的文件夾路徑(替換為你自己的路徑)
folder_path = r'C:\test_os'print(f"👉 正在掃描文件夾: {folder_path}")total_files = 0# 使用 os.walk 遍歷所有子文件夾
for root, dirs, files in os.walk(folder_path):# root: 當前文件夾路徑# dirs: 子文件夾列表# files: 文件列表# 統計當前文件夾的文件數file_count = len(files)total_files += file_count# 打印當前文件夾信息print(f"\n📁 文件夾: {root}")print(f"  子文件夾: {dirs}")print(f"  文件數量: {file_count} 個")print(f"  示例文件: {files[:3]}...")  # 顯示前3個文件print(f"\n? 總共找到 {total_files} 個文件")

(2)批量重命名圖片文件?

import os# 指定圖片文件夾路徑(替換為你自己的路徑)
image_folder = r'C:\test_os\images'# 計數器
count = 1print("👉 開始重命名圖片...")for filename in os.listdir(image_folder):# 拼接完整文件路徑old_path = os.path.join(image_folder, filename)# 只處理圖片文件(擴展名判斷)if filename.lower().endswith(('.png', '.jpg', '.jpeg')):# 新文件名:pic_001.jpgnew_name = f"pic_{count:03d}{os.path.splitext(filename)[1]}" new_path = os.path.join(image_folder, new_name)# 執行重命名os.rename(old_path, new_path)print(f"重命名: {filename} → {new_name}")count += 1print("? 重命名完成!")

(3)整理下載文件夾(按擴展名分類)?

import os
import shutil# 假設你的下載文件夾路徑(替換為你自己的路徑)
download_folder = r'C:\test_os\temp'
target_folder = r'C:\test_os\sorted_files'# 創建目標文件夾(如果不存在)
os.makedirs(target_folder, exist_ok=True)print("👉 開始整理文件...")for filename in os.listdir(download_folder):file_path = os.path.join(download_folder, filename)# 跳過文件夾if os.path.isdir(file_path):continue# 獲取文件擴展名(不帶點)_, ext = os.path.splitext(filename)ext = ext[1:].lower()  # 去掉點并轉小寫# 按擴展名創建子文件夾dest_folder = os.path.join(target_folder, ext)os.makedirs(dest_folder, exist_ok=True)# 移動文件shutil.move(file_path, os.path.join(dest_folder, filename))print(f"移動文件: {filename} → {ext}/")print("? 整理完成!")

3. 重要概念解析

  1. ??os.path.join()??
    自動處理不同操作系統的路徑分隔符(Windows用\,Mac/Linux用/),比手動拼接更安全。
    ? 正確寫法:os.path.join('folder', 'sub', 'file.txt')
    ? 錯誤寫法:'folder' + '/' + 'sub' + '/' + 'file.txt'

  2. ??絕對路徑 vs 相對路徑??

    • 絕對路徑:從根目錄開始的完整路徑(C:\test_os\images\cat.jpg
    • 相對路徑:相對于當前工作目錄的路徑(images/cat.jpg
    • 獲取當前目錄:os.getcwd()
  3. ??路徑存在性檢查

if os.path.exists(path):print("路徑存在")
if os.path.isfile(path):print("這是一個文件")
if os.path.isdir(path):print("這是一個文件夾")

@浙大疏錦行

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905304.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905304.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905304.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

初入OpenCV

OpenCV簡介 OpenCV是一個開源的跨平臺計算機視覺庫&#xff0c;它實現了圖像處理和計算機視覺方面的很多通用算法。 應用場景&#xff1a; 目標識別&#xff1a;人臉、車輛、車牌、動物&#xff1b; 自動駕駛&#xff1b;醫學影像分析&#xff1b; 視頻內容理解分析&#xff…

訊聯云庫項目開發日志(一)

1、設計數據庫 2、寫基本框架 entity、controller、service、exception、utils、mapper mapper層&#xff1a; 生成了一系列的CRUD方法 工具類&#xff1a;線程安全的日期工具類、 ??參數校驗工具類? 線程安全的日期工具類??&#xff1a;主要用于 ??日期格式化&…

langchain學習

無門檻免費申請OpenAI ChatGPT API搭建自己的ChatGPT聊天工具 https://nuowa.net/872 基本概念 LangChain 能解決大模型的兩個痛點&#xff0c;包括模型接口復雜、輸入長度受限離不開自己精心設計的模塊。根據LangChain 的最新文檔&#xff0c;目前在 LangChain 中一共有六大…

Protobuf工具

#region 知識點一 什么是 Protobuf //Protobuf 全稱是 protocol - buffers&#xff08;協議緩沖區&#xff09; // 是谷歌提供給開發者的一個開源的協議生成工具 // 它的主要工作原理和我們之前做的自定義協議工具類似 // 只不過它更加的完善&…

zst-2001 上午題-歷年真題 軟件工程(38個內容)

CMM 軟件工程 - 第1題 b 軟件工程 - 第2題 c 軟件工程 - 第3題 c 軟件工程 - 第4題 b 軟件工程 - 第5題 b CMMI 軟件工程 - 第6題 0.未完成&#xff1a;未執行未得到目標。1.已執行&#xff1a;輸入-輸出實現支持2.已管理&#xff1a;過程制度化&#x…

軟考架構師考試-UML圖總結

考點 選擇題 2-4分 案例分析0~1題和面向對象結合考察&#xff0c;前幾年固定一題。近3次考試沒有出現。但還是有可能考。 UML圖概述 1.用例圖&#xff1a;描述系統功能需求和用戶&#xff08;參與者&#xff09;與系統之間的交互關系&#xff0c;聚焦于“做什么”。 2.類圖&…

數據結構(七)——圖

一、圖的定義與基本術語 1.圖的定義 圖G由頂點集V和邊集E組成&#xff0c;記為G(V,E)&#xff0c;其中V(G)表示圖G中頂點的有限非空集&#xff1b;E(G)表示圖G中頂點之間的關系&#xff08;邊&#xff09;的集合 注意&#xff1a;線性表可以是空表&#xff0c;樹可以是空樹&…

Android7 Input(六)InputChannel

概述: 本文講述Android Input輸入框架中 InputChannel的功能。從前面的講述&#xff0c;我們知道input系統服務最終將輸入事件寫入了InputChannel&#xff0c;而input屬于system_server進程&#xff0c;App屬于另外一個進程&#xff0c;當Input系統服務想要把事件傳遞給App進行…

【 Redis | 實戰篇 秒殺實現 】

目錄 前言&#xff1a; 1.全局ID生成器 2.秒殺優惠券 2.1.秒殺優惠券的基本實現 2.2.超賣問題 2.3.解決超賣問題的方案 2.4.基于樂觀鎖來解決超賣問題 3.秒殺一人一單 3.1.秒殺一人一單的基本實現 3.2.單機模式下的線程安全問題 3.3.集群模式下的線程安全問題 前言&…

如何用URDF文件構建機械手模型并與MoveIt集成

機械手URDF文件的編寫 我們用urdf文件來描述我們的機械手的外觀以及物理性能。這里為了簡便&#xff0c;就只用了基本的圓柱、立方體了。追求美觀的朋友&#xff0c;還可以用dae文件來描述機械手的外形。 import re def remove_comments(text):pattern r<!--(.*?)-->…

《構建社交應用的安全結界:雙框架對接審核API的底層邏輯與實踐》

用戶生成內容如潮水般涌來。從日常的生活分享&#xff0c;到激烈的觀點碰撞&#xff0c;這些內容賦予社交應用活力&#xff0c;也帶來管理難題。虛假信息、暴力言論、侵權內容等不良信息&#xff0c;如同潛藏的暗礁&#xff0c;威脅著社交平臺的健康生態。內容審核機制&#xf…

39:分類器流程

第一步 創建支持向量機分類器 create_class_svm (7, rbf, KernelParam, Nu, |ClassNames|, one-versus-one, principal_components, 5, SVMHandle) 第二步 添加樣本到分類器里 for ClassNumber : 0 to |ClassNames| - 1 by 1 *列出目錄下的所有文件 list_files (ReadPath…

LangChain對話鏈:打造智能多輪對話機器人

LangChain對話鏈:打造智能多輪對話機器人 目錄 LangChain對話鏈:打造智能多輪對話機器人ConversationChain 是什么核心功能與特點基本用法示例內存機制自定義提示詞應用場景與其他鏈的結合`SequentialChain` 是什么![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/0…

el-select 結合 el-tree:樹形下拉數據

一、單選 <template><div class"selectTree-wapper"><el-selectv-model"selectValue"placeholder"請選擇"popper-class"custom-el-select-class"ref"selectRef"clearableclear"clearHandle">&…

BFS算法篇——從晨曦到星辰,BFS算法在多源最短路徑問題中的詩意航行(下)

文章目錄 引言一、01矩陣1.1 題目鏈接&#xff1a;https://leetcode.cn/problems/01-matrix/description/1.2 題目分析&#xff1a;1.3 思路講解&#xff1a;1.4 代碼實現&#xff1a; 二、飛地的數量2.1 題目鏈接&#xff1a;https://leetcode.cn/problems/number-of-enclaves…

Leetcode (力扣)做題記錄 hot100(49,136,169,20)

力扣第49題&#xff1a;字母異位詞分組 49. 字母異位詞分組 - 力扣&#xff08;LeetCode&#xff09; 遍歷數組&#xff0c;將每一個字符串變成char數組 然后排序&#xff0c;如果map里面有則將他的值返回來&#xff08;key是排序好的字符串&#xff09; class Solution {pu…

【自學30天掌握AI開發】第1天 - 人工智能與大語言模型基礎

自學30天掌握AI開發 - 第1天 &#x1f4c6; 日期和主題 日期&#xff1a;第1天 主題&#xff1a;人工智能與大語言模型基礎 &#x1f3af; 學習目標 了解人工智能的發展歷史和基本概念掌握大語言模型的基本原理和工作機制區分不同類型的AI模型及其特點理解AI在當前社會中的…

WebRTC 源碼原生端Demo入門-1

1、概述 我的代碼是比較新的&#xff0c;基于webrtc源碼倉庫的main分支的&#xff0c;在windows下把源碼倉庫下載好了后&#xff0c;用visual stdio 2022打開進行編譯調試src/examples/peerconnection_client測試項目,主要是跑通這個demo來入手和調試&#xff0c;純看代碼很難…

【LeetCode】刪除排序數組中的重復項 II

題目 鏈接 思路 雙指針 我好聰明啊&#xff0c;自己想出了這個雙指針的辦法&#xff0c;哈哈哈哈哈哈哈&#xff0c;太高興了 代碼 class Solution(object):def removeDuplicates(self, nums):""":type nums: List[int]:rtype: int"""nlen…

通義千問席卷日本!開源界“卷王”阿里通義千問成為日本AI發展新基石

據日本經濟新聞&#xff08;NIKKEI&#xff09;報道&#xff0c;通義千問已成為日本AI開發的新基礎&#xff0c;其影響力正逐步擴大&#xff0c;深刻改變著日本AI產業的格局。 同時&#xff0c;日本經濟新聞將通義千問Qwen2.5-Max列為全球AI模型綜合評測第六名&#xff0c;不僅…