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

Python中os模块详解

Python os 模块详解

os 模块提供了丰富的文件和目录操作环境变量访问进程管理等功能,是与操作系统交互的核心模块之一。


基本导入方式

import os

常用目录与文件操作


1️⃣ 获取/设置当前工作目录

os.getcwd()           # 获取当前工作目录
os.chdir('/tmp')      # 改变当前工作目录

2️⃣ 路径拼接与判断(推荐用法)

# 路径拼接,自动处理斜杠
path = os.path.join('folder', 'subfolder', 'file.txt')# 判断路径类型
os.path.exists(path)        # 路径是否存在
os.path.isfile(path)        # 是否是文件
os.path.isdir(path)         # 是否是目录

3️⃣ 创建与删除目录

os.mkdir('mydir')           # 创建单级目录
os.makedirs('a/b/c')        # 创建多级目录
os.rmdir('mydir')           # 删除空目录
os.removedirs('a/b/c')      # 递归删除空目录

4️⃣ 列出目录内容

os.listdir('.')  # 当前目录下的所有文件和文件夹

5️⃣ 文件操作(删除、重命名、移动)

os.remove('file.txt')                 # 删除文件
os.rename('old.txt', 'new.txt')      # 重命名
os.replace('a.txt', 'b.txt')         # 原子性重命名(覆盖 b.txt)

注意:不支持复制操作(请使用 shutil 模块复制文件)


6️⃣ 获取文件大小、属性

size = os.path.getsize('file.txt')   # 获取字节大小
mtime = os.path.getmtime('file.txt') # 获取修改时间戳

路径操作函数(推荐配合 os.path 使用)

os.path.abspath('a.txt')              # 获取绝对路径
os.path.basename('/a/b/c.txt')        # 获取文件名:c.txt
os.path.dirname('/a/b/c.txt')         # 获取目录:/a/b
os.path.splitext('file.txt')          # ('file', '.txt')

环境变量操作

os.environ['HOME']                   # 获取环境变量
os.environ.get('PATH', '')           # 更安全的获取方式
os.environ['MY_VAR'] = '123'         # 设置环境变量(当前进程内有效)

进程与系统命令调用

1️⃣ 获取进程相关信息

os.getpid()        # 当前进程 ID
os.getppid()       # 父进程 ID
os.uname()         # 获取系统信息(Linux/macOS 有效)

2️⃣ 运行系统命令(非推荐)

os.system("ls -l")     # 执行命令并打印结果(不建议用于重要逻辑)

更推荐使用 subprocess 模块。


权限与状态检查(高级)

os.access('file.txt', os.R_OK)  # 是否可读
os.access('file.txt', os.W_OK)  # 是否可写
os.chmod('file.txt', 0o755)     # 改变文件权限(Linux/macOS)

示例:递归列出目录中所有 .txt 文件

import osdef list_txt_files(dir_path):for root, dirs, files in os.walk(dir_path):for file in files:if file.endswith('.txt'):print(os.path.join(root, file))list_txt_files('./myfolder')

注意事项

⚠️ 项目描述
路径拼接永远使用 os.path.join(),不要硬编码斜杠
删除操作删除文件/目录前请先检查是否存在,避免异常
路径兼容尽量使用 os.path.abspath()os.sep 等跨平台方法
系统命令推荐使用 subprocess 替代 os.system()

常见用途速查表

功能示例
获取当前路径os.getcwd()
拼接路径os.path.join(a, b)
判断是否存在os.path.exists(path)
列出目录文件os.listdir(path)
遍历文件树os.walk(path)
创建目录os.makedirs(path)
删除文件/目录os.remove(path), os.rmdir(path)
获取文件属性os.path.getsize(), getmtime()
环境变量访问os.environ.get('PATH')
运行系统命令os.system("echo Hello")
改权限os.chmod(file, 0o644)

自动分类清理脚本(按扩展名整理文件)综合示例

功能说明:

  • 将指定目录下的文件按 文件扩展名 分类;
  • 自动创建子文件夹,如:Images/, Documents/, Videos/ 等;
  • 支持自定义扩展名类别;
  • 忽略文件夹、不处理子目录中的文件(可扩展支持递归);

脚本代码如下:

import os
import shutil# 分类映射表:扩展名 -> 目标文件夹
FILE_CATEGORIES = {'Images': ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'],'Documents': ['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx', '.txt'],'Videos': ['.mp4', '.avi', '.mov', '.mkv'],'Music': ['.mp3', '.wav', '.flac'],'Archives': ['.zip', '.rar', '.7z', '.tar', '.gz'],'Scripts': ['.py', '.js', '.sh', '.bat', '.cpp', '.c', '.java'],
}def get_category(extension):"""根据文件扩展名返回所属分类名"""for category, ext_list in FILE_CATEGORIES.items():if extension.lower() in ext_list:return categoryreturn 'Others'  # 未知类型放入 Others 文件夹def organize_directory(target_dir):"""清理并整理目标目录"""if not os.path.isdir(target_dir):print(f"[!] 路径不存在: {target_dir}")returnfor entry in os.listdir(target_dir):file_path = os.path.join(target_dir, entry)if os.path.isfile(file_path):ext = os.path.splitext(entry)[1]category = get_category(ext)target_folder = os.path.join(target_dir, category)os.makedirs(target_folder, exist_ok=True)new_path = os.path.join(target_folder, entry)try:shutil.move(file_path, new_path)print(f"[√] 移动: {entry} -> {category}/")except Exception as e:print(f"[!] 移动失败: {entry},原因:{e}")if __name__ == "__main__":# 修改为你要整理的目录folder_to_organize = r"C:\Users\yourname\Downloads"organize_directory(folder_to_organize)

使用说明

  1. 将上面代码保存为 file_organizer.py
  2. 修改 folder_to_organize 为你要整理的目录;
  3. 在终端或命令行运行:
python file_organizer.py

注意事项

  • 本脚本不会递归处理子目录中的文件(如需处理可扩展为 os.walk());
  • 同名文件移动时会覆盖,若需保留原文件可加重命名逻辑;
  • 移动操作是不可逆的,使用前请备份重要数据。

相关文章:

Python中os模块详解

Python os 模块详解 os 模块提供了丰富的文件和目录操作、环境变量访问、进程管理等功能,是与操作系统交互的核心模块之一。 基本导入方式 import os常用目录与文件操作 1️⃣ 获取/设置当前工作目录 os.getcwd() # 获取当前工作目录 os.chdir(/tmp) …...

便捷高效能源服务触手可及,能耗监测系统赋能智能建筑与智慧城市

在建筑行业迈向智能化、精细化管理的进程中,传统建筑管理模式因信息割裂、数据利用不足等问题,逐渐难以满足现代建筑复杂的运营需求。楼宇自控系统实现了建筑设备的智能调控,BIM技术则构建了建筑的三维数字化模型,当两者相遇&…...

Kotlin List 操作全面指南

在传统 Java 开发 List 相关的 API 中,有着样板代码冗长、缺乏链式调用、空安全等问题。 Kotlin 这门语言 为 List 提供了丰富的扩展函数,这些函数大大简化了集合操作,解决了传统 Java 集合 API 中的许多痛点。 一、基础操作 1. 创建 List …...

C++--范围for循环详解

范围 for 循环是 C11 引入的语法特性,用于简化遍历容器或数组元素的过程。它比传统 for 循环更简洁安全,特别适合初学者。以下是详细讲解: 基本语法 for (元素类型 变量名 : 容器/数组) {// 循环体(使用变量名访问当前元素&#…...

ISO18436-2 CATII级振动分析师能力矩阵

ISO18436-2021是当前针对针对分析师的一个标准,它对振动分析师的能力和知识体系做了4级分类,这里给出的是一家公司响应ISO18436的CATII级标准,做的一个专题培训的教学大纲。摘自: 【振動噪音產學技術聯盟】04/19-23 ISO 18436-2…...

deepseek问答:torch.full() 函数详解

torch.full() 是 PyTorch 中用于创建指定形状、所有元素值都相同的新张量的核心函数。它在深度学习中有广泛应用,尤其是在初始化张量和创建特殊数据结构时。 函数签名 torch.full(size, fill_value, *, dtypeNone, layouttorch.strided, deviceNone, requires_gra…...

dvwa4——File Inclusion

LOW: 先随便点开一个文件,可以观察到url栏变成这样,说明?page是dvwa当前关卡用来加载文件的参数 http://10.24.8.35/DVWA/vulnerabilities/fi/?pagefile1.php 我们查看源码 ,没有什么过滤,直接尝试访问其他文件 在url栏的pag…...

MYSQL 高级 SQL 技巧

高级 SQL 技巧 以下是一些高级 SQL 技巧,可以帮助优化查询、提高性能并解决复杂的数据处理问题。 使用窗口函数 窗口函数允许在查询结果的行上进行计算,而不会减少行数。常见的窗口函数包括 ROW_NUMBER()、RANK()、DENSE_RANK() 和聚合函数如 SUM() 与…...

Spring Boot养老院管理系统源码分享

概述 基于Spring Boot开发的养老院管理系统,该系统通过智能化管理模块,为养老机构提供高效运营解决方案。 主要内容 后台管理功能 系统后台功能完善,左侧导航栏涵盖首页、安全巡查管理、设备管理等模块。设备管理界面以表格形式清晰展示设…...

go|context源码解析

文章目录 Context接口Deadline()Done()Err()Value() canceler接口ctxemptyCtxcancelCtxtimerCtxvalueCtx 基本使用cancelCtxvalueCtx 首先看一下源码对“context”的描述, When a Context is canceled, all Contexts derived from it are also canceled. 当一个Cont…...

如何在PowerBI中使用Analyze in Excel

如何在PowerBI中使用Analyze in Excel 之前分享过如何使用DAXStudio将PowerBI与Excel连接 ,今天介绍另外一个工具,也可以实现同样的功能,Analyze in Excel。 使用Analyze in Excel 第一步: 首先准备好一个PBIX文件&#xff0c…...

【学习记录】Element UI导入报错 * element-ui/lib/theme-chalk/index.css in ./src/main.js

文章目录 📌 摘要⚠️ 问题描述🔍 原因分析✅ 正常情况下的依赖结构❗ 问题根源 ✅ 解决方案✅ 方法一:使用 cnpm 安装 Element UI(推荐)步骤 1:全局安装 cnpm(使用淘宝镜像)步骤 2&…...

大模型分布式训练笔记(基于accelerate+deepspeed分布式训练解决方案)

文章目录 一、分布式训练基础与环境配置(1)分布式训练简介(2)如何进行分布式训练(3)分布式训练环境配置 二、数据并行-原理与实战(pytorch框架的nn.DataParallel)1)data …...

鸿蒙UI开发——组件的自适应拉伸

1、概 述 针对常见的开发场景,ArkUI开发框架提供了非常多的自适应布局能力,这些布局可以独立使用,也可多种布局叠加使用。本文针对ArkUI提供的拉伸能力做简单讨论。 拉伸能力是指容器组件尺寸发生变化时,增加或减小的空间全部分…...

鸿蒙仓颉语言开发教程:自定义弹窗

假期第一天,祝大家端午节快乐。昨天观看了时代旗舰尊界S800的发布,不得不感慨这车真好啊~ 放假闲来无事,继续跟大家分享仓颉语言的开发教程,今天介绍一下自定义弹窗。 仓颉语言中的自定义弹窗和ArkTs类似&#xff0c…...

meilisearch docker 简单安装

ElasticSearch平替 docker run -it -d -p 7700:7700 -v /home/dev/melisearch/meili_data:/meili_data -e MEILI_MASTER_KEYRhTX1pLPSKSn7KW9yf9u_MNKC0v1YKkmx2Sc6qSwbLQ getmeili/meilisearch:v1.13 MEILI_MASTER_KEYRhTX1pLPSKSn7KW9yf9u_MNKC0v1YKkmx2Sc6qSwbLQ …...

Python 数据分析与可视化实战:从数据清洗到图表呈现

目录 一、数据采集与初步探索 二、数据清洗的七种武器 1. 缺失值处理策略 2. 异常值检测与修正 3. 数据类型转换技巧 三、数据转换的魔法工坊 1. 透视表与交叉表 2. 窗口函数实战 3. 文本数据处理 四、可视化呈现的艺术 1. 基础图表进阶用法 2. 高级可视化方案 3.…...

机器学习数据降维方法

1.数据类型 2.如何选择降维方法进行数据降维 3.线性降维:主成分分析(PCA)、线性判别分析(LDA) 4.非线性降维 5.基于特征选择的降维 6.基于神经网络的降维 数据降维是将高维数据转换为低维表示的过程,旨在保…...

uefi和legacy有什么区别_从几方面分析uefi和legacy的区别

uefi和legacy是两种不同的引导方式,uefi是新式的BIOS,legacy是传统BIOS。你在UEFI模式下安装的系统,只能用UEFI模式引导;同理,如果你是在Legacy模式下安装的系统,也只能在legacy模式下进系统。uefi只支持64为系统且磁盘…...

Spring @Autowired自动装配的实现机制

Spring Autowired自动装配的实现机制 Autowired 注解实现原理详解一、Autowired 注解定义二、Qualifier 注解辅助指定 Bean 名称三、BeanFactory:按类型获取 Bean四、注入逻辑实现五、小结 源码见:mini-spring Autowired 注解实现原理详解 Autowired 的…...

Neo4j 数据可视化与洞察获取:原理、技术与实践指南

在关系密集型数据的分析领域,Neo4j 凭借其强大的图数据模型脱颖而出。然而,将复杂的连接关系转化为直观见解,需要专业的数据可视化技术和分析方法。本文将深入探讨 Neo4j 数据可视化的核心原理、关键技术、实用技巧以及结合图数据科学库&…...

一种基于性能建模的HADOOP配置调优策略

1.摘要 作为分布式系统基础架构的Hadoop为应用程序提供了一组稳定可靠的接口。该文作者提出了一种基于集成学习建模的Hadoop配置参数调优的方法。实验结果表明,该性能模型可以准确预测MapReduce应用程序的运行时间。采用提出的Hadoop配置参数方法调优后&#xff0c…...

【Stable Diffusion 1.5 】在 Unet 中每个 Cross Attention 块中的张量变化过程

系列文章目录 文章目录 系列文章目录前言特征图和注意力图的尺寸差异原因在Break-a-Scene中的具体实现总结 前言 特征图 (Latent) 尺寸和注意力图(attention map)尺寸在扩散模型中有差异,是由于模型架构和注意力机制的特性决定的。 特征图和注意力图的尺寸差异原…...

MySQL - Windows 中 MySQL 禁用开机自启,并在需要时手动启动

Windows 中 MySQL 禁用开机自启,并在需要时手动启动 打开服务管理器:在底部搜索栏输入【services.msc】 -> 点击【服务】 打开 MySQL 服务的属性管理:找到并右击 MySQL 服务 -> 点击【属性】 此时的 MySQL 服务:正在运行&a…...

前端下载文件,文件打不开的问题记录

需求: 下载是很常见的接口,但是经常存在下载的文件异常的问题。此处记录一个常见的错误。 分析: 1、接口请求需要配置{responseType: ‘blob’},此时要求返回的格式为blob,进而进行下载。 const res await axios.…...

小白的进阶之路系列之十一----人工智能从初步到精通pytorch综合运用的讲解第四部分

本文将介绍如何用PyTorch构建模型 torch.nn.Module和torch.nn.Parameter 除了Parameter之外,本视频中讨论的所有类都是torch.nn.Module的子类。这是PyTorch基类,用于封装PyTorch模型及其组件的特定行为。 torch.nn.Module的一个重要行为是注册参数。如果特定的Module子类具…...

OpenCV CUDA模块霍夫变换------在 GPU 上执行概率霍夫变换检测图像中的线段端点类cv::cuda::HoughSegmentDetector

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::HoughSegmentDetector 是 OpenCV 的 CUDA 模块中一个非常重要的类,它用于在 GPU 上执行 概率霍夫变换(Probabi…...

详解一下RabbitMQ中的channel.Publish

函数定义(来自 github.com/streadway/amqp) func (ch *Channel) Publish(exchange string,key string,mandatory bool,immediate bool,msg Publishing, ) error这个方法的作用是:向指定的交换机 exchange 发送一条消息 msg,带上路…...

硬件学习笔记--62 MCU的ECC功能简介

1. 基本概念 ECC(Error Correction Code,错误校正码)是MCU(微控制器)中用于检测和纠正存储器数据错误的硬件功能,主要应用于Flash、RAM、Cache等存储单元,确保数据在传输或存储过程中的可靠性。…...

Uiverse.io:免费UI组件库

Uiverse.io 完整使用指南:免费UI组件库的终极教程 🌟 什么是 Uiverse.io? Uiverse.io 是一个开源的UI组件库平台,为开发者和设计师提供了大量精美的、可直接使用的HTML/CSS组件。这个平台的特色在于所有组件都是由社区贡献的,完全免费,并且可以直接复制代码使用。 �…...