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

PYTHON训练营DAY24

# SO代码我们的感情好像跳楼机

# 元组创建时,可以省略括号:my_tuple4 = 10, 20, 'thirty'

# 字符串要加“ ”

元组

一、创建

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)查看类型
print(type(my_tuple2)) # 创建空元组
empty_tuple = ()
# 或者使用 tuple() 函数
empty_tuple2 = tuple()
print(empty_tuple)
print(empty_tuple2)

二、常见用法

(一)索引

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])  # 每隔一个元素取一个

(三)长度获取

my_tuple = (1, 2, 3)
print(len(my_tuple))

三、管道与元组

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}")

可迭代对象

一个可迭代对象:能够一次返回其成员(元素)的对象,可在一个循环(如 for 循环)中遍历

序列类型:list、tuple`(元组)、str (字符串)、range(范围)
集合类型:set (集合)
字典类型:字典、文件对象 、生成器、迭代器

# 列表 (list)
print("迭代列表:")
my_list = [1, 2, 3, 4, 5]
for item in my_list:print(item)# 元组 (tuple)
print("迭代元组:")
my_tuple = ('a', 'b', 'c')
for item in my_tuple:print(item)# 字符串 (str)
print("迭代字符串:")
my_string = "hello"
for char in my_string:print(char)# range (范围)
print("迭代 range:")
for number in range(5):  # 生成 0, 1, 2, 3, 4print(number)# 集合类型 (Set Types)# 集合 (set) - 注意集合是无序的,所以每次迭代的顺序可能不同
print("迭代集合:")
my_set = {3, 1, 4, 1, 5, 9}
for item in my_set:print(item)# 迭代字典的值 (values)
print("迭代字典的值:")
for value in my_dict.values():print(value)# 迭代字典的键值对 (items)
print("迭代字典的键值对:")
for key, value in my_dict.items(): # items方法很好用print(f"Key: {key}, Value: {value}")

OS模块

处理图像数据集、自定义数据加载流程、保存和加载复杂的模型结构时,os 模块非常有用

(一)读取路径

import os
os.getcwd()

为什么不直接复制路径?

假设你直接右键复制了绝对路径 /Users/you/projects/data.csv,可能会遇到以下问题:

  1. 换台电脑就失效:在另一台电脑上,路径可能变成 /Users/another/data.csv

  2. 协作时出错:团队成员的文件结构可能不同,硬编码路径会导致代码无法共享。

  3. 目录变化时维护成本高:如果文件移动到其他位置,需要修改所有相关代码。

(二)获取文件列表

os.listdir() # list directory 获取当前工作目录下的文件列表
import os# 在脚本开头获取当前工作目录
BASE_DIR = os.getcwd()# 构建数据文件路径
data_path = os.path.join(BASE_DIR, "data", "input.csv")
output_path = os.path.join(BASE_DIR, "results", "output.csv")# 使用路径
with open(data_path, "r") as f:data = f.read()# 保存结果
with open(output_path, "w") as f:f.write(data)

使用 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

在 Python 中,反斜杠 \ 是用来表示转义字符的。例如:

  • \n 表示换行符
  • \t 表示制表符
  • \" 表示双引号(用于在字符串中包含双引号)

但在 Windows 文件路径 中,路径分隔符是 \(例如:C:\Users\data.csv),这就会产生冲突

如果直接在字符串中使用单斜杠 \,Python 会将其视为转义字符,导致路径解析错误

(三)环境变量方法

# 使用 .items() 方法可以方便地同时获取变量名(键)和变量值,之前已经提过字典的items()方法,可以取出来键和值
# os.environ是可迭代对象for variable_name, value in os.environ.items():# 直接打印出变量名和对应的值print(f"{variable_name}={value}")# 打印总数
print(f"\n--- 总共检测到 {len(os.environ)} 个环境变量 ---")

目录树

C:\
├── Documents
│   ├── report.txt
│   └── project_folder
│       ├── data.csv
│       └── README.md
├── Pictures
│   ├── landscape.jpg
│   └── portrait.png
└── Downloads

常见用途

  • 批量处理文件:例如重命名所有图片文件、压缩文件夹等。

  • 搜索文件:查找特定类型的文件(如 .csv.txt)。

  • 统计目录信息:计算目录大小、文件数量等

遍历数据目录并加载数据

import os
from PIL import Image
import numpy as npdata_dir = "data"  # 数据根目录
train_dir = os.path.join(data_dir, "train")
test_dir = os.path.join(data_dir, "test")# 加载训练数据
X_train, y_train = [], []
for class_name in os.listdir(train_dir):class_dir = os.path.join(train_dir, class_name)if os.path.isdir(class_dir):  # 确保是目录for img_name in os.listdir(class_dir):img_path = os.path.join(class_dir, img_name)if img_path.endswith(('.jpg', '.jpeg', '.png')):# 加载图像并预处理(示例:转为NumPy数组)img = Image.open(img_path).resize((224, 224))img_array = np.array(img) / 255.0  # 归一化X_train.append(img_array)y_train.append(class_name)  # 类别标签# 转换为NumPy数组(用于深度学习模型)
X_train = np.array(X_train)
y_train = np.array(y_train)print(f"训练数据形状: {X_train.shape}")
print(f"训练标签数量: {len(y_train)}")

@浙大疏锦行

相关文章:

  • 佰力博科技与您探讨表面电阻的测试方法及应用领域
  • 中国品牌日 | 以科技创新为引领,激光院“风采”品牌建设结硕果
  • 微服务,服务粒度多少合适
  • 最优化方法Python计算:有约束优化应用——线性可分问题支持向量机
  • 影刀RPA开发-采集爬取京东读书书籍
  • 【redis】缓存策略
  • [Java实战]Spring Boot 3构建 RESTful 风格服务(二十)
  • Telnet 类图解析
  • 我的五周年创作纪念日
  • 股指期货是什么?有啥特点?怎么用?
  • Linux 内核网络协议栈:从 Socket 类型到协议注册的深度解析
  • 大模型常用位置编码方式
  • MYSQL 查询去除小数位后多余的0
  • Oracle SYSTEM/UNDO表空间损坏的处理思路
  • 数据归属地信息库在广告营销中的应用
  • SQL server数据库实现远程跨服务器定时同步传输数据
  • 集成DHTMLX 预订排期调度组件实践指南:如何实现后端数据格式转换
  • [论文阅读]ControlNET: A Firewall for RAG-based LLM System
  • HTML应用指南:利用POST请求获取全国京东快递服务网点位置信息
  • LangSmith 基本使用教程
  • 七旬男子驾“老头乐”酒驾被查,曾有两次酒驾两次肇事记录
  • 央媒评网红质疑胖东来玉石定价暴利:对碰瓷式维权不能姑息
  • 宝通科技:与宇树合作已签约,四足机器人在工业场景落地是重点商业化项目
  • 著名连环画家庞邦本逝世
  • 地下5300米开辟“人造气路”,我国页岩气井垂深纪录再刷新
  • 郑州通报涉“健康证”办理有关问题查处进展情况