day24 python元组和OS模块的深度探索
目录
一、元组的特性与应用
(一)元组的特点
(二)元组的创建
(三)元组的常见用法
二、元组在机器学习管道中的应用
三、可迭代对象的遍历
四、OS模块的实用功能
(一)获取当前工作目录
(二)列出当前目录下的文件
(三)安全地拼接路径
(四)环境变量
(五)遍历目录树
一、元组的特性与应用
(一)元组的特点
-
有序且可重复:元组与列表类似,都是有序的集合,可以包含重复的元素。
-
不可变性:元组中的元素一旦定义,便不可修改。这一特性在深度学习场景中尤为重要,例如在定义模型参数和形状时,确保其后续不会被意外修改。
-
广泛应用于机器学习库:许多流行的机器学习和深度学习库(如TensorFlow、PyTorch、NumPy等)在API中广泛使用元组来表示形状、配置等信息。
(二)元组的创建
元组的创建非常简单,可以使用圆括号()
,也可以省略括号,通过逗号分隔元素来创建。例如:
my_tuple1 = (1, 2, 3)
my_tuple2 = ('a', 'b', 'c')
my_tuple3 = (1, 'hello', 3.14, [4, 5]) # 元组可以包含不同类型的数据
my_tuple4 = 10, 20, 'thirty' # 省略括号,逗号是关键
此外,还可以通过tuple()
函数创建空元组或从其他可迭代对象转换为元组。
(三)元组的常见用法
-
索引与切片:可以通过索引访问元组中的元素,也可以使用切片操作来获取元组的子集
my_tuple = ('P', 'y', 't', 'h', 'o', 'n') print(my_tuple[0]) # 第一个元素 print(my_tuple[2]) # 第三个元素 print(my_tuple[-1]) # 最后一个元素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]) # 每隔一个元素取一个
-
获取元组长度:使用
len()
函数可以获取元组中元素的数量my_tuple = (1, 2, 3) print(len(my_tuple)) # 输出:3
二、元组在机器学习管道中的应用
在机器学习中,Pipeline
类常用于组织多个处理步骤。Pipeline
接收一个列表作为输入,其中每个元素是一个元组,元组的第一个元素是步骤的名称,第二个元素是对应的处理对象。例如:
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegressionpipeline = Pipeline([('scaler', StandardScaler()), # 数据标准化('logreg', LogisticRegression()) # 逻辑回归分类器
])
这种结构的优势在于:
-
列表:定义了步骤的执行顺序,且可以随时修改。
-
元组:将每个步骤的名称和处理对象绑定在一起,便于后续引用和设置参数。
三、可迭代对象的遍历
可迭代对象是Python中一个非常重要的概念,它指的是那些可以在循环中逐个返回其成员的对象。常见的可迭代对象包括:
-
序列类型:
-
list
(列表) -
tuple
(元组) -
str
(字符串) -
range
(范围)
-
-
集合类型:
-
set
(集合)
-
-
字典类型:
-
dict
(字典):迭代时返回键(keys)
-
以下是一些示例:
# 列表
my_list = [1, 2, 3, 4, 5]
for item in my_list:print(item)# 元组
my_tuple = ('a', 'b', 'c')
for item in my_tuple:print(item)# 字符串
my_string = "hello"
for char in my_string:print(char)# range
for number in range(5):print(number)# 集合
my_set = {3, 1, 4, 1, 5, 9}
for item in my_set:print(item)# 字典
my_dict = {'name': 'Alice', 'age': 30, 'city': 'Singapore'}
for key in my_dict:print(key)for value in my_dict.values():print(value)for key, value in my_dict.items():print(f"Key: {key}, Value: {value}")
四、OS模块的实用功能
随着深度学习项目的复杂度增加,数据量和代码结构也变得越来越复杂。os
模块提供了丰富的功能,用于管理文件、目录和路径,以及进行基本的操作系统交互。
(一)获取当前工作目录
import os
current_dir = os.getcwd()
print(f"当前工作目录: {current_dir}")
(二)列出当前目录下的文件
files = os.listdir()
print(f"当前目录下的文件列表: {files}")
(三)安全地拼接路径
path_a = r'C:\Users\YourUsername\Documents'
path_b = 'MyProjectData'
file = 'results.csv'
file_path = os.path.join(path_a, path_b, file)
print(f"拼接后的路径: {file_path}")
(四)环境变量
os.environ
是一个类似字典的对象,包含了当前系统的所有环境变量。可以通过以下方式访问和打印环境变量:
for variable_name, value in os.environ.items():print(f"{variable_name}={value}")
(五)遍历目录树
os.walk()
是一个非常强大的函数,用于遍历目录树。它会为每个目录生成一个包含三个元素的元组:(dirpath, dirnames, filenames)
。以下是一个示例:
假设目录结构如下:
my_project/
├── data/
│ ├── processed/
│ └── raw/
│ └── data1.csv
├── src/
│ ├── models/
│ │ └── model_a.py
│ └── utils.py
├── main.py
└── README.md
使用os.walk()
遍历:
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}")
输出结果:
--- 开始遍历目录: 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']
@浙大疏锦行