聊城网站推广动态,花店网站开发设计的项目结构,小程序维护费用一般多少钱,wordpress案例站点目录
一、元组
1. 通俗解释
2. 元组的特点
3. 元组的创建
4. 元组的常见用法
二、可迭代对象
1. 定义
2. 示例
3. 通俗解释
三、OS 模块
1. 通俗解释
2. 目录树
四、作业
1. 准备工作
2. 实战代码示例
3. 重要概念解析 一、元组
是什么#xff1a;一种…目录
一、元组
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. 元组的特点
有序可以重复这一点和列表一样元组中的元素不能修改这一点非常重要深度学习场景中很多参数、形状定义好了确保后续不能被修改。
很多流行的 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类接收的是一个包含多个小元组的 列表 作为输入。
可以这样理解这个结构
列表 []: 定义了步骤执行的先后顺序。Pipeline 会按照列表中的顺序依次处理数据。之所以用列表是未来可以对这个列表进行修改。元组 (): 用于将每个步骤的名称和处理对象捆绑在一起。名称用于在后续访问或设置参数时引用该步骤而对象则是实际执行数据转换或模型训练的工具。固定了操作名操作
不用字典因为字典是无序的。
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_size0.3, random_state42)# 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(fKey: {key}, Value: {value})迭代字典的键值对:
Key: name, Value: Alice
Key: age, Value: 30
Key: city, Value: Singapore3. 通俗解释
可迭代对象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 rC:\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)} 个环境变量 ---)
ALLUSERSPROFILEC:\ProgramData
AMOSAPPC:\Users\PC\AppData\Local\AmosDevelopment\Amos\26
AMOSDOCSC:\Users\PC\Documents\AmosDevelopment\Amos\26
AMOSEXAMPLESC:\Users\PC\AppData\Local\AmosDevelopment\Amos\26\Examples\English
AMOSLOGSC:\Users\PC\AppData\Local\AmosDevelopment\Amos\26\Logs
AMOSPLUGINSC:\Users\PC\AppData\Local\AmosDevelopment\Amos\26\Plugins
AMOSPROGRAMD:\Jupyter\SEM\Amos26
AMOSTEMPLATESC:\Users\PC\AppData\Local\AmosDevelopment\Amos\26\Templates\English
AMOSTUTORIALC:\Users\PC\AppData\Local\AmosDevelopment\Amos\26\Tutorial\English
APPDATAC:\Users\PC\AppData\Roaming
CHROME_CRASHPAD_PIPE_NAME\\.\pipe\crashpad_2824_TQDHDSUOXXPVVCJP
COMMONPROGRAMFILESC:\Program Files\Common Files
COMMONPROGRAMFILES(X86)C:\Program Files (x86)\Common Files
COMMONPROGRAMW6432C:\Program Files\Common Files
COMPUTERNAMEDESKTOP-N2RLOJJ
COMSPECC:\WINDOWS\system32\cmd.exe
CONDA_DEFAULT_ENVvs
CONDA_EXED:\Anaconda\Scripts\conda.exe
CONDA_PREFIXD:\Anaconda\envs\vs
CONDA_PROMPT_MODIFIER(vs)
CONDA_PYTHON_EXED:\Anaconda\python.exe
CONDA_ROOTD:\Anaconda
CONDA_SHLVL1
CUDA_PATHC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3
CUDA_PATH_V11_3C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3
CUDA_PATH_V12_1C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1
CUDA_VISIBLE_DEVICES0
DRIVERDATAC:\Windows\System32\Drivers\DriverData
ELECTRON_RUN_AS_NODE1
FPS_BROWSER_APP_PROFILE_STRINGInternet Explorer
FPS_BROWSER_USER_PROFILE_STRINGDefault
HF_HOMEE:\cache\huggingface_cache
HOMEDRIVEC:
HOMEPATH\Users\PC
JPY_INTERRUPT_EVENT4256
LOCALAPPDATAC:\Users\PC\AppData\Local
LOGONSERVER\\DESKTOP-N2RLOJJ
NUMBER_OF_PROCESSORS24
NVCUDASAMPLES11_3_ROOTC:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.3
NVCUDASAMPLES_ROOTC:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.3
NVTOOLSEXT_PATHC:\Program Files\NVIDIA Corporation\NvToolsExt\
OLLAMA_MODELSE:\ollamamodels
ONEDRIVEC:\Users\PC\OneDrive
ORIGINAL_XDG_CURRENT_DESKTOPundefined
OSWindows_NT
PATHd:\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_ARCHITECTUREAMD64
PROCESSOR_IDENTIFIERIntel64 Family 6 Model 151 Stepping 2, GenuineIntel
PROCESSOR_LEVEL6
PROCESSOR_REVISION9702
PROGRAMDATAC:\ProgramData
PROGRAMFILESC:\Program Files
PROGRAMFILES(X86)C:\Program Files (x86)
PROGRAMW6432C:\Program Files
PROMPT(vs) $P$G
PSMODULEPATH%ProgramFiles%\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
PUBLICC:\Users\Public
PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING1
PYTHONIOENCODINGutf-8
PYTHONUNBUFFERED1
PYTHONUTF81
PYTHON_FROZEN_MODULESon
SSL_CERT_FILED:\Anaconda\envs\vs\Library\ssl\cacert.pem
SYSTEMDRIVEC:
SYSTEMROOTC:\WINDOWS
TEMPC:\Users\PC\AppData\Local\Temp
TESSDATA_PREFIXD:\soft_uncode\Tesseract-OCR\
TMPC:\Users\PC\AppData\Local\Temp
USERDOMAINDESKTOP-N2RLOJJ
USERDOMAIN_ROAMINGPROFILEDESKTOP-N2RLOJJ
USERNAMEPC
USERPROFILEC:\Users\PC
VSCODE_CODE_CACHE_PATHC:\Users\PC\AppData\Roaming\Code\CachedData\19e0f9e681ecb8e5c09d8784acaa601316ca4571
VSCODE_CRASH_REPORTER_PROCESS_TYPEextensionHost
VSCODE_CWDC:\Users\PC\Desktop\vscode工作区
VSCODE_DOTNET_INSTALL_TOOL_ORIGINAL_HOMEundefined
VSCODE_ESM_ENTRYPOINTvs/workbench/api/node/extensionHostProcess
VSCODE_HANDLES_UNCAUGHT_ERRORStrue
VSCODE_IPC_HOOK\\.\pipe\ccdd4d73-1.100.0-main-sock
VSCODE_L10N_BUNDLE_LOCATIONfile:///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_PID2824
WINDIRC:\WINDOWS
_CONDA_OLD_CHCP936
__CONDA_OPENSLL_CERT_FILE_SET1
PYDEVD_USE_FRAME_EVALNO
TERMxterm-color
CLICOLOR1
FORCE_COLOR1
CLICOLOR_FORCE1
PAGERcat
GIT_PAGERcat
MPLBACKENDmodule://matplotlib_inline.backend_inline
KMP_DUPLICATE_LIB_OKTrue
KMP_INIT_AT_FORKFALSE--- 总共检测到 96 个环境变量 ---2. 目录树
os.walk() 是 Python os 模块中一个非常有用的函数它用于遍历或称“行走”一个目录树。
核心功能
os.walk(top, topdownTrue, οnerrοrNone, followlinksFalse) 会为一个目录树生成文件名。对于树中的每个目录包括 top 目录本身它会 yield产生一个包含三个元素的元组 (tuple)
(dirpath, dirnames, filenames)
dirpath: 一个字符串表示当前正在访问的目录的路径。dirnames: 一个列表list包含了 dirpath 目录下所有子目录的名称不包括 . 和 ..。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. 准备工作 新建一个测试文件夹例如 C:\test_os在里面创建子文件夹和测试文件 test_os/
├── docs/
│ ├── report.docx
│ └── data.xlsx
├── images/
│ ├── cat.jpg
│ └── dog.png
└── temp/└── old_file.txt 2. 实战代码示例 1遍历文件夹并统计文件数量 import os# 指定要操作的文件夹路径替换为你自己的路径
folder_path rC:\test_osprint(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 rC:\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 fpic_{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 rC:\test_os\temp
target_folder rC:\test_os\sorted_files# 创建目标文件夹如果不存在
os.makedirs(target_folder, exist_okTrue)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_okTrue)# 移动文件shutil.move(file_path, os.path.join(dest_folder, filename))print(f移动文件: {filename} → {ext}/)print(✅ 整理完成) 3. 重要概念解析 os.path.join() 自动处理不同操作系统的路径分隔符Windows用\Mac/Linux用/比手动拼接更安全。 ✅ 正确写法os.path.join(folder, sub, file.txt) ❌ 错误写法folder / sub / file.txt 绝对路径 vs 相对路径 绝对路径从根目录开始的完整路径C:\test_os\images\cat.jpg相对路径相对于当前工作目录的路径images/cat.jpg获取当前目录os.getcwd() 路径存在性检查 if os.path.exists(path):print(路径存在)
if os.path.isfile(path):print(这是一个文件)
if os.path.isdir(path):print(这是一个文件夹) 浙大疏锦行