当前位置: 首页 > news >正文

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("这是一个文件夹")

@浙大疏锦行

相关文章:

Python训练营打卡——DAY24(2025.5.13)

目录 一、元组 1. 通俗解释 2. 元组的特点 3. 元组的创建 4. 元组的常见用法 二、可迭代对象 1. 定义 2. 示例 3. 通俗解释 三、OS 模块 1. 通俗解释 2. 目录树 四、作业 1. 准备工作 2. 实战代码示例​ 3. 重要概念解析 一、元组 是什么​​&#xff1a;一种…...

【TDengine源码阅读】DLL_EXPORT

2025年5月13日&#xff0c;周二清晨 #ifdef WINDOWS #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT #endif为啥Linux和MacOS平台时宏为空&#xff0c;难道Linux和mac不用定义导出函数吗&#xff1f; 这段代码是一个跨平台的宏定义&#xff0c;用于处理不…...

电子科技浪潮下的华秋电子:慕尼黑上海电子展精彩回顾

为期3天的2025慕尼黑上海电子展&#xff08;electronica China 2025&#xff09;于17日在上海新国际博览中心落下帷幕。 展会那规模&#xff0c;真不是吹的&#xff01;本届展会汇聚了1,794家国内外行业知名品牌企业的展商来 “摆摊”&#xff0c;展览面积大得像个超级大迷宫&…...

TDengine编译成功后的bin目录下的文件的作用

2025年5月13日&#xff0c;周二清晨 以下是TDengine工具集中各工具的功能说明&#xff1a; 核心工具 taosd • TDengine的核心服务进程&#xff0c;负责数据存储、查询和集群管理。 taos • 命令行客户端工具&#xff0c;用于连接TDengine服务器并执行SQL操作。 taosBenchma…...

spark sql基本操作

Spark SQL 是 Apache Spark 的一个模块&#xff0c;用于处理结构化数据。它允许用户使用标准的 SQL 语法来查询数据&#xff0c;并且可以无缝地与 Spark 的其他功能&#xff08;如 DataFrame、Dataset 和 RDD&#xff09;结合使用。以下是 Spark SQL 的基本使用方法和一些常见操…...

采购流程规范化如何实现?日事清流程自动化助力需求、采购、财务高效协作

采购审批流程全靠人推进&#xff0c;内耗严重&#xff0c;效率低下&#xff1f; 花重金上了OA&#xff0c;结果功能有局限、不灵活&#xff1f; 问题出在哪里&#xff1f;是我们的要求太多、太苛刻吗&#xff1f;NO&#xff01; 流程名称&#xff1a; 采购审批管理 流程功能…...

影刀RPA开发-CSS选择器介绍

影刀RPA网页自动化开发&#xff0c;很多时候需要我们查看页面源码&#xff0c;查找相关的元素属性&#xff0c;这就需要我们有必要了解CSS选择器。本文做了些简单的介绍。希望对大家有帮助&#xff01; 1. CSS选择器概述 1.1 定义与作用 CSS选择器是CSS&#xff08;层叠样式…...

DeepSeek、B(不是百度)AT、科大讯飞靠什么坐上中国Ai牌桌?

在国产AI舞台上&#xff0c;DeepSeek、阿里、字节、腾讯、讯飞群雄逐鹿&#xff0c;好不热闹。 这场堪称“军备竞赛”的激烈角逐&#xff0c;绝非简单的市场竞争&#xff0c;而是一场关乎技术、创新与未来布局的深度博弈。在竞赛中&#xff0c;五大模型各显神通&#xff0c;以…...

MySQL全局优化

目录 1 硬件层面优化 1.1 CPU优化 1.2 内存优化 1.3 存储优化 1.4 网络优化 2 系统配置优化 2.1 操作系统配置 2.2 MySQL服务配置 3 库表结构优化 4 SQL及索引优化 mysql可以从四个层面考虑优化&#xff0c;分别是 硬件系统配置库表结构SQL及索引 从成本和优化效果来看&#xf…...

【github】主页显示star和fork

数据收集&#xff1a;定期&#xff08;例如每天&#xff09;获取你所有仓库的 Star 和 Fork 总数。数据存储&#xff1a;将收集到的数据&#xff08;时间戳、总 Star 数、总 Fork 数&#xff09;存储起来。图表生成&#xff1a;根据存储的数据生成变化曲线图&#xff08;通常是…...

网站遭受扫描攻击,大量爬虫应对策略

网站的日志里突然有很多访问路径不存在的&#xff0c;有些ip地址也是国外的&#xff0c;而且访问是在深夜且次数非常频繁紧密。判定就是不怀好意的扫描网站寻找漏洞。也有些是爬虫&#xff0c;且是国外的爬虫&#xff0c;有的也是不知道的爬虫爬取网站。网站的真实流量不多&…...

【 Redis | 实战篇 秒杀实现 】

目录 前言&#xff1a; 1.全局ID生成器 2.秒杀优惠券 2.1.秒杀优惠券的基本实现 2.2.超卖问题 2.3.解决超卖问题的方案 2.4.基于乐观锁来解决超卖问题 3.秒杀一人一单 3.1.秒杀一人一单的基本实现 3.2.单机模式下的线程安全问题 3.3.集群模式下的线程安全问题 前言&…...

手搓传染病模型(SEIARW)

在传染病传播的研究中&#xff0c;水传播途径是一个重要的考量因素。SEAIRW 模型&#xff08;易感者 S - 暴露者 E - 感染者 I - 无症状感染者 A - 康复者 R - 水中病原体 W&#xff09;综合考虑了人与人接触传播以及水传播的双重机制&#xff0c;为分析此类传染病提供了全面的…...

【C++】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希

【C】深入理解 unordered 容器、布隆过滤器与分布式一致性哈希 在日常开发中&#xff0c;无论是数据结构优化、缓存设计&#xff0c;还是分布式架构搭建&#xff0c;unordered_map、布隆过滤器和一致性哈希都是绕不开的关键工具。它们高效、轻量&#xff0c;在性能与扩展性方面…...

第五天——贪心算法——射气球

1.题目 有一些球形气球贴在一个表示 XY 平面的平坦墙壁上。气球用一个二维整数数组 points 表示&#xff0c;其中 points[i] [xstart, xend] 表示第 i 个气球的水平直径范围从 xstart 到 xend。你并不知道这些气球的具体 y 坐标。 可以从 x 轴上的不同位置垂直向上&#xff0…...

麦肯锡110页PPT企业组织效能提升调研与诊断分析指南

“战略清晰、团队拼命、资源充足&#xff0c;但业绩就是卡在瓶颈期上不去……”这是许多中国企业面临的真实困境。表面看似健康的企业&#xff0c;往往隐藏着“组织亚健康”问题——跨部门扯皮、人才流失、决策迟缓、市场反应滞后……麦肯锡最新研究揭示&#xff1a;组织健康度…...

BFS算法篇——从晨曦到星辰,BFS算法在多源最短路径问题中的诗意航行(上)

文章目录 引言一、多源BFS的概述二、应用场景三、算法步骤四、代码实现五、代码解释六、总结 引言 在浩渺的图论宇宙中&#xff0c;图的每一条边、每一个节点都是故事的组成部分。每当我们站在一个复杂的迷宫前&#xff0c;开始感受它的深邃时&#xff0c;我们往往不再局限于从…...

理解 C# 中的各类指针

前言 变量可以理解成是一块内存位置的别名&#xff0c;访问变量也就是访问对应内存中的数据。 指针是一种特殊的变量&#xff0c;它存储了一个内存地址&#xff0c;这个内存地址代表了另一块内存的位置。 指针指向的可以是一个变量、一个数组元素、一个对象实例、一块非托管内存…...

MySQL 事务(二)

文章目录 事务隔离性理论理解隔离性隔离级别 事务隔离级别的设置和查看事务隔离级别读未提交读提交&#xff08;不可重复读&#xff09; 事务隔离性理论 理解隔离性 MySQL服务可能会同时被多个客户端进程(线程)访问&#xff0c;访问的方式以事务方式进行一个事务可能由多条SQL…...

【HarmonyOS】ArkTS开发应用的横竖屏切换

文章目录 1、简介2、静态 — 横竖屏切换2.1、效果2.2、实现原理2.3、module.json5 源码 3、动态 — 横竖屏切换3.1、应用随系统旋转切换横竖屏3.2、setPreferredOrientation 原理配置3.3、锁定旋转的情况下&#xff0c;手动设置横屏状态 1、简介 在完成全屏网页嵌套应用开发后…...

Linux中find命令用法核心要点提炼

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01; 以下是针对Linux中find命令用法的核心要点提炼&#xff1a; 基础语法结构 find [路径] [选项] [操作]路径&#xff1a;查找目录&#xff08;.表当前目录&#xff0c;/表根目录&#xff09;…...

专栏项目框架介绍

项目整体实现框图 如下图所示&#xff0c;是该项目的整体框图&#xff0c;项目的功能概括为&#xff1a;PC端下发数据文件&#xff0c;FPGA板卡接收数据文件&#xff0c;缓存至DDR中&#xff0c;待数据文件发送完毕&#xff0c;循环读取DDR有效写区域数据&#xff0c;将DDR数据…...

WSL 安装 Debian 12 后,Linux 如何安装 vim ?

在 WSL 的 Debian 12 中安装 Vim 非常简单&#xff0c;只需使用 apt 包管理器即可。以下是详细步骤&#xff1a; 1. 更新软件包列表 首先打开终端&#xff0c;确保系统包列表是最新的&#xff1a; sudo apt update2. 安装 Vim 直接通过 apt 安装 Vim&#xff1a; sudo apt …...

【SpringBoot】从零开始全面解析Spring MVC (一)

本篇博客给大家带来的是SpringBoot的知识点, 本篇是SpringBoot入门, 介绍Spring MVC相关知识. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子…...

C++—特殊类设计设计模式

目录 C—特殊类设计&设计模式1.设计模式2.特殊类设计2.1设计一个无法被拷贝的类2.2设计一个只能在堆上创建对象的类2.3设计一个只能在栈上创建对象的类2.4设计一个类&#xff0c;无法被继承2.5设计一个类。这个类只能创建一个对象【单例模式】2.5.1懒汉模式实现2.5.2饿汉模…...

初入OpenCV

OpenCV简介 OpenCV是一个开源的跨平台计算机视觉库&#xff0c;它实现了图像处理和计算机视觉方面的很多通用算法。 应用场景&#xff1a; 目标识别&#xff1a;人脸、车辆、车牌、动物&#xff1b; 自动驾驶&#xff1b;医学影像分析&#xff1b; 视频内容理解分析&#xff…...

霍夫圆变换全面解析(OpenCV)

文章目录 一、霍夫圆变换基础1.1 霍夫圆变换概述1.2 圆的数学表达与参数化 二、霍夫圆变换算法实现2.1 标准霍夫圆变换算法流程2.2 参数空间的表示与优化 三、关键参数解析3.1 OpenCV中的HoughCircles参数3.2 参数调优策略 四、Python与OpenCV实现参考4.1 基本实现代码4.2 改进…...

互联网大厂Java求职面试:优惠券服务架构设计与AI增强实践-4

互联网大厂Java求职面试&#xff1a;优惠券服务架构设计与AI增强实践-4 场景设定 面试官&#xff1a;某互联网大厂技术总监&#xff0c;拥有超过10年大型互联网企业一线技术管理经验&#xff0c;擅长分布式架构、微服务治理、云原生等领域。 候选人&#xff1a;郑薪苦&#…...

项目中会出现的css样式

1.重复渐变边框 思路&#xff1a; 主要是用重复的背景渐变实现的 如图&#xff1a; <div class"card"><div class"container">全面收集中医癌毒临床医案&#xff0c;建立医案共享机制&#xff0c;构建癌毒病机知识图谱&#xff0c;便于医疗人…...

LeetCode[101]对称二叉树

思路&#xff1a; 对称二叉树是左右子树对称&#xff0c;而不是左右子树相等&#xff0c;所以假设一个树只有3个节点&#xff0c;那么判断这个数是否是对称二叉树&#xff0c;肯定是先判断左右两个树&#xff0c;然后再看根节点&#xff0c;这样递归顺序我们就确认了&#xff0…...

黑马k8s(四)

1.资源管理介绍 本章节主要介绍yaml语法和kubernetes的资源管理方式 2.YAML语言介绍 3.资源管理方式 命令式对象管理 dev下删除了pod&#xff0c;之后发现还有pod&#xff0c;把原来的pod删除了&#xff0c;重新启动了一个 命令式对象配置 声明式对象配置 命令式对象配置&…...

华为ensp实现跨vlan通信

要在网络拓扑中实现主机192.168.1.1、192.168.1.2和192.168.2.1之间的互相通信&#xff0c;需要正确配置交换机&#xff08;S5700&#xff09;和路由器&#xff08;AR3260&#xff09;&#xff0c;以确保不同网段之间的通信&#xff08;即VLAN间路由&#xff09;。 网络拓扑分析…...

TCPIP详解 卷1协议 十 用户数据报协议和IP分片

10.1——用户数据报协议和 IP 分片 UDP是一种保留消息边界的简单的面向数据报的传输层协议。它不提供差错纠正、队列管理、重复消除、流量控制和拥塞控制。它提供差错检测&#xff0c;包含我们在传输层中碰到的第一个真实的端到端&#xff08;end-to-end&#xff09;校验和。这…...

Java笔记4

第一章 static关键字 2.1 概述 以前我们定义过如下类&#xff1a; public class Student {// 成员变量public String name;public char sex; // 男 女public int age;// 无参数构造方法public Student() {}// 有参数构造方法public Student(String a) {} }我们已经知道面向…...

Matlab 垂向七自由度轨道车辆开关型半主动控制

1、内容简介 Matlab 229-垂向七自由度轨道车辆开关型半主动控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

Matlab 短时交通流预测AR模型

1、内容简介 Matlab 230-短时交通流预测AR模型 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略城市道路短时交通流预测.pdf...

MYSQL之表的约束

表中真正约束字段的是数据类型, 但是只有数据类型约束就很单一, 也需要有一些额外的约束, 从而更好的保证数据的合法性, 从业务逻辑角度保证数据的正确性. 比如有一个字段是email, 要求是唯一的. 为什么要有表的约束? 表的约束: 表中一定要有各种约束, 通过约束, 让我们未来…...

使用ACE-Step在本地生成AI音乐

使用ACE-Step v1-3.5B开源模型从文本提示、标签和歌词创建完整的AI生成歌曲 — 无需云服务,无需API,仅需您的GPU。 这是由ACE Studio和StepFun开发的开源音乐生成模型。 在对数据隐私和云服务依赖性日益增长的担忧时代,ACE-Step将强大的文本转音乐生成完全离线,使其成为A…...

web 自动化之 Unittest 四大组件

文章目录 一、如何开展自动化测试1、项目需求分析&#xff0c;了解业务需求 web 功能纳入自动化测试2、选择何种方式实现自动化测试 二、Unittest 框架三、TestCase 测试用例四、TestFixture 测试夹具 执行测试用例前的前置操作及后置操作五、TestSuite 测试套件 & TestLoa…...

2025年渗透测试面试题总结-渗透测试红队面试七(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 渗透测试红队面试七 一百八十一、Shiro漏洞类型&#xff0c;721原理&#xff0c;721利用要注意什么&am…...

Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁

设计高性能数据表的原则 数据库设计经验和技巧 单张数据表的字段不宜过多&#xff08;20个&#xff09;&#xff0c;如果确实存在大量field,考虑拆成多张表或json text存储 数据表字段都是not null的&#xff0c;即使没有数据&#xff0c;最好也使用无意义的值填充&#xff0c…...

day012-软件包管理专题

文章目录 1. 生成随机密码2. 软件包管理2.1 类红帽系统2.1.1 安装软件包2.1.2 查找软件包2.1.3 查看软件包内容2.1.4 查看命令或文件属于哪个软件包2.1.5 重新安装软件包2.1.6 删除软件包2.1.7 升级2.1.8 rpm安装软件包2.1.9 rpm升级软件包2.1.10 rpm检查软件包文件是否改变 3.…...

学习黑客5 分钟深入浅出理解Windows Firewall

5 分钟深入浅出理解Windows Firewall &#x1f525; 大家好&#xff01;今天我们将探索Windows防火墙——这是Windows操作系统中的核心安全组件&#xff0c;负责控制进出计算机的网络流量。无论你是计算机初学者&#xff0c;还是在TryHackMe等平台上学习网络安全的爱好者&…...

node .js 启动基于express框架的后端服务报错解决

问题&#xff1a; node .js 用npm start 启动基于express框架的后端服务报错如下&#xff1a; /c/Program Files/nodejs/npm: line 65: 26880 Segmentation fault "$NODE_EXE" "$NPM_CLI_JS" "$" 原因分析&#xff1a; 遇到 /c/Program F…...

feign.RequestInterceptor 简介-笔记

1. feign.RequestInterceptor 简介 Feign 是一个声明式 Web 服务客户端&#xff0c;用于简化 HTTP 请求的编写与管理。feign.RequestInterceptor 是 Feign 提供的一个接口&#xff0c;用于在请求发出之前对其进行拦截和修改。这在微服务架构中非常有用&#xff0c;比如在请求中…...

软考错题(四)

在程序执行过程中&#xff0c;高速缓存cache与主存间的地址映射由硬件自动完成 以下关于两个浮点数相加运算的叙述中&#xff0c;正确的是首先进行对阶&#xff0c;阶码小的向阶码大的对齐 认证只能阻止主动攻击不能阻止被动攻击 BGP是外部网关协议 查看端口信息&#xff1…...

SSRF相关

SSRF(Server Side Request Forgery,服务器端请求伪造)&#xff0c;攻击者以服务器的身份发送一条构造好的请求给服务器所在地内网进行探测或攻击。 产生原理&#xff1a; 服务器端提供了能从其他服务器应用获取数据的功能&#xff0c;如从指定url获取网页内容、加载指定地址的图…...

供应链学习

供应链安全 供应链&#xff1a;整个业务系统中的节点&#xff08;一般是上游节点&#xff09; 乙方一般提供资源&#xff1a;人 软件 硬件 服务 如何寻找供应链 1.招投标信息&#xff1a;寻标包 例如&#xff1a;烟草 智能办公 2.网站本身指纹 例如&#xff1a; powered by xxx…...

力扣HOT100之二叉树:226. 翻转二叉树

这道题很简单&#xff0c;用递归来做&#xff0c;对于一个根节点来说&#xff0c;有两种情况我们不需要翻转&#xff1a;一是根节点为空&#xff0c;二是根节点为叶子节点。这很容易理解&#xff0c;当传入的节点不满足上面的两种情况时&#xff0c;我们就需要做一个翻转&#…...

如何让rabbitmq保存服务断开重连?保证高可用?

在 Spring Boot 集成 RabbitMQ 时&#xff0c;可以通过以下几种方式让 RabbitMQ 保存服务断开重连&#xff0c;以保证高可用&#xff1a; 配置自动重连 application.properties 配置 &#xff1a;在 Spring Boot 的配置文件 application.properties 中&#xff0c;可以设置 Ra…...