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

玩转Python标准库:os与sys常用方法

目录一、os与sysPython与操作系统之间的翻译官二、os模块文件系统与进程管理2.1 获取当前工作目录与路径拼接2.2 创建、删除、重命名文件和目录2.3 遍历目录os.walk2.4 执行系统命令os.system vs subprocess2.5 环境变量操作三、sys模块Python解释器“遥控器”3.1 命令行参数sys.argv3.2 程序退出sys.exit3.3 路径相关sys.path3.4 标准输入输出错误sys.stdin/stdout/stderr3.5 查看版本与平台信息四、os vs sys一张表看懂区别五、实战案例用ossys打造一个命令行工具箱六、避坑指南与进阶技巧七、总结从文件操作到命令行参数一篇文章吃透Python最核心的两大系统模块。一、os与sysPython与操作系统之间的翻译官在Python编程中如果你想和操作系统底层打交道比如读写文件、运行系统命令、获取环境变量或者想控制Python解释器本身比如接收命令行参数、修改模块搜索路径、退出程序那么 os 和 sys 就是最核心的两个标准库。os负责操作系统相关功能Operating Systemsys负责解释器系统相关功能System很多初学者分不清两者的区别其实一句话os管外面操作系统sys管里面Python解释器。二、os模块文件系统与进程管理2.1 获取当前工作目录与路径拼接python import os # 获取当前工作目录类似 pwd / cd cwd os.getcwd() print(f当前目录{cwd}) # 改变工作目录 os.chdir(/tmp) print(os.getcwd()) # 跨平台路径拼接推荐 path os.path.join(folder, sub, file.txt) print(path) # folder/sub/file.txt (Linux) 或 folder\sub\file.txt (Windows)注意不要手动拼 / 或 \用 os.path.join 自动适配操作系统。2.2 创建、删除、重命名文件和目录python # 创建单级目录 os.mkdir(test_dir) # 创建多级目录相当于 mkdir -p os.makedirs(level1/level2/level3) # 删除空目录 os.rmdir(test_dir) # 只能删空目录 os.removedirs(level1/level2/level3) # 递归删除空目录链 # 删除文件 os.remove(some_file.txt) # 重命名文件或目录 os.rename(old_name.txt, new_name.txt)2.3 遍历目录os.walkos.walk 是递归遍历目录树的利器python for root, dirs, files in os.walk(my_folder): print(f当前目录{root}) print(f子目录{dirs}) print(f文件{files}) # 可以动态修改 dirs 列表来控制遍历哪些子目录实战找出所有 .py 文件python py_files [] for root, dirs, files in os.walk(.): for file in files: if file.endswith(.py): py_files.append(os.path.join(root, file)) print(py_files)2.4 执行系统命令os.system vs subprocesspython # 旧方法os.system不推荐因为无法获取输出 os.system(ls -l) # 推荐subprocess 模块Python 3 更安全 import subprocess result subprocess.run([ls, -l], capture_outputTrue, textTrue) print(result.stdout)虽然 os.system 简单但建议用 subprocess因为它能更好地控制输入输出和错误处理。2.5 环境变量操作python # 获取某个环境变量 path os.environ.get(PATH) print(path) # 设置环境变量仅当前进程生效 os.environ[MY_VAR] hello print(os.environ[MY_VAR]) # 判断环境变量是否存在 if JAVA_HOME in os.environ: print(os.environ[JAVA_HOME])三、sys模块Python解释器“遥控器”3.1 命令行参数sys.argv当你运行 python script.py arg1 arg2 -v 时sys.argv 会捕获所有参数python import sys # sys.argv[0] 是脚本名称后面依次是传入的参数 print(f脚本名{sys.argv[0]}) print(f参数个数{len(sys.argv) - 1}) for i, arg in enumerate(sys.argv[1:], 1): print(f参数{i}: {arg}) # 运行示例 python test.py hello world --debug # 输出 # 脚本名test.py # 参数个数3 # 参数1: hello # 参数2: world # 参数3: --debug3.2 程序退出sys.exit在脚本中遇到错误或希望提前终止时使用 sys.exit() 返回退出码python import sys def main(): if not some_condition: print(条件不满足退出程序) sys.exit(1) # 非0表示异常退出 # 正常逻辑 sys.exit(0) # 0表示成功 if __name__ __main__: main()3.3 路径相关sys.pathsys.path 是Python搜索模块的路径列表你可以动态添加自定义路径python import sys # 查看当前模块搜索路径 for p in sys.path: print(p) # 添加一个自定义目录让Python能导入其中的模块 sys.path.append(/my/custom/module/folder)常用于解决相对导入问题或者临时加载未安装的本地包。3.4 标准输入输出错误sys.stdin/stdout/stderrpython import sys # 从标准输入读取一行类似 input() data sys.stdin.readline().strip() # 输出到标准输出 sys.stdout.write(Hello, world!\n) # 输出错误信息不会重定向到普通输出 sys.stderr.write(Something went wrong!\n)重定向示例比如将输出同时写入文件python original_stdout sys.stdout with open(log.txt, w) as f: sys.stdout f print(这一行会写入文件而不是屏幕) sys.stdout original_stdout3.5 查看版本与平台信息python import sys print(fPython版本{sys.version}) print(f版本详细信息{sys.version_info}) print(f操作系统平台{sys.platform}) # win32, linux, darwin 等可以用 sys.platform 来判断操作系统实现跨平台兼容代码。四、os vs sys一张表看懂区别功能领域os 模块sys 模块文件和目录操作os.mkdir, os.remove, os.lkwu环境变量os.environ❌执行系统命令os.system❌命令行参数❌sys.argv退出程序❌sys.exit模块搜索路径❌sys.path标准输入/输出/错误❌sys.stdin/stdout/stderrPython解释器信息❌sys.version, sys.platform简单记忆os 是操作系统的手sys 是 Python 解释器的脑。五、实战案例用ossys打造一个命令行工具箱让我们综合运用 os 和 sys写一个可以统计目录下所有文件行数的小工具python import os import sys def count_lines(file_path): 返回文件的行数 try: with open(file_path, r, encodingutf-8) as f: return sum(1 for _ in f) except Exception as e: print(f读取文件 {file_path} 出错: {e}, filesys.stderr) return 0 def main(): if len(sys.argv) ! 2: print(用法: python line_counter.py 目录路径) sys.exit(1) target_dir sys.argv[1] if not os.path.isdir(target_dir): print(f错误: {target_dir} 不是一个有效目录, filesys.stderr) sys.exit(1) total_lines 0 file_count 0 for root, dirs, files in os.walk(target_dir): for file in files: if file.endswith(.py): # 只统计 Python 文件 full_path os.path.join(root, file) lines count_lines(full_path) total_lines lines file_count 1 print(f{full_path}: {lines} 行) print(f\n总计 {file_count} 个 Python 文件共 {total_lines} 行代码) if __name__ __main__: main() # 运行 python line_counter.py ./my_project这个小工具展示了sys.argv 接收命令行参数、sys.exit 退出并返回错误码、sys.stderr 输出错误信息、os.walk 遍历目录、os.path.isdir / os.path.join 路径操作六、避坑指南与进阶技巧问题1os.path.join 在 Windows 上路径分隔符是反斜杠但Python字符串中反斜杠是转义符解决使用原始字符串或双反斜杠但通常 os.path.join 返回的路径可以直接使用Python会自动处理。问题2os.system 执行命令有安全风险命令注入解决使用 subprocess.run 并传递列表参数而不是字符串。问题3修改 sys.path 后导入的模块可能与预期不符解决尽量用 PYTHONPATH 环境变量或使用 pip install -e . 安装开发模式包。进阶技巧1. 获取脚本所在目录无论从哪里调用script_dir os.path.dirname(os.path.abspath(__file__))2. 跨平台判断操作系统python if sys.platform win32: # Windows 特定逻辑 elif sys.platform linux: # Linux 逻辑3. 优雅地处理相对/绝对路径abs_path os.path.abspath(data/config.json)4. 使用 pathlib 替代部分 os.pathPython 3.4 推荐from pathlib import Path p Path(.) / data / config.json print(p.resolve()) # 绝对路径七、总结模块最常用的5个方法osos.getcwd(), os.path.join(), os.walk(), os.environ, os.makedirs()syssys.argv, sys.exit(), sys.path, sys.stdout.write(), sys.version

相关文章:

玩转Python标准库:os与sys常用方法

目录 一、os与sys:Python与操作系统之间的翻译官 二、os模块:文件系统与进程管理 2.1 获取当前工作目录与路径拼接 2.2 创建、删除、重命名文件和目录 2.3 遍历目录:os.walk 2.4 执行系统命令:os.system vs subprocess 2.5…...

ROS新手必看:5分钟搞定usb_cam相机标定(附棋盘格下载)

ROS实战:从零完成USB摄像头标定的完整指南 在机器人视觉系统中,相机标定是确保测量精度的基础步骤。许多ROS初学者往往在第一步就遇到障碍——要么找不到合适的标定工具,要么被复杂的参数配置搞得晕头转向。本文将带你用最直接的方式完成整个…...

集成AI 的 Redis 客户端 Rudist发布新版了庸

Qt是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

无线定位算法实战:用MATLAB实现AOA、TDOA、TOA和RSSI定位(附完整代码)

无线定位算法实战:MATLAB实现四大定位技术全解析 引言:无线定位技术的工程价值 想象一下,在一个大型智能仓库中,AGV小车需要以厘米级精度自主导航;在现代化医院里,医疗设备需要被实时追踪;或者…...

精华贴分享|【没什么用系列】【百帖纪念】量化让我越来越觉得:我和 AI,其实都在被同一种机制训练

本文来源于量化小论坛策略分享会板块精华帖,作者为PlumeSoft,发布于2026年3月18日。以下为精华帖正文:声明最近几个月在疯狂使用AI,越用越有感慨。打不过就加入,这个帖子是由我构思,ChatGPT主笔&#xff0c…...

绝对能解决IntelliJ IDEA 控制台中文乱码问题!!!

绝对能解决IntelliJ IDEA 控制台中文乱码问题!!! 1 idea 控制台中文乱码idea 运行代码,控制台的中文却是乱码,相信这个是所有 Javaer 都会遇到的问题,但是很惭愧,我工作 7 年才彻底解决这个问题…...

力扣第98题:颜色分类

第一部分:问题描述 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sort 函数的情况下解决这个问题。…...

TI F28P65X开发板实战:CPU Timer精准定时与LED控制

1. 从零开始玩转F28P65X定时器 第一次接触TI的F28P65X开发板时,我被它强大的定时器功能惊艳到了。这块芯片内置的CPU Timer精度可以达到微秒级,对于需要精确时间控制的场景简直是神器。就拿最简单的LED闪烁来说,传统延时函数控制闪烁间隔总会…...

PD协议学习二

控制消息(一)1、GoodCRCGoodCRC消息应由接收方发送,以确认先前的消息已被正确接收(即包含GoodCRC消息)。GoodCRC消息应返回该消息的MessageID,以便发送方能确定所确认的是正确的消息。GoodCRC消息的第一个比…...

生成对抗网络(GANs)深入解析:原理、实现与应用

生成对抗网络(GANs)深入解析:原理、实现与应用 1. 背景介绍 生成对抗网络(Generative Adversarial Networks,简称GANs)是深度学习领域的一项重大突破,由Ian Goodfellow等人于2014年提出。GANs通…...

Nginx本地缓存

一、前言:为什么需要 Nginx 本地缓存?你是否面临这些痛点?❌ 后端服务压力大,大量重复请求打到应用层❌ 静态资源(图片、JS、CSS)频繁回源❌ 接口响应慢,用户体验差❌ 后端宕机时,整…...

Linux设备驱动 -- RTC驱动移植DS1339

查看原理图RTC芯片采用的是DS1339芯片,这是达拉斯半导体公司的一款RTC芯片,使用I2C接口。 芯片接在RK3568的I2C5。 Linux内核支持DS1339 检索linux内核是否支持DS1339芯片驱动。 通过搜索可知到,Linux系统内核中已有达拉斯DS1339的驱动&#…...

用 SEONIB批量生成 SEO 博客来提升 Google 排名

用 SEONIB 批量生成 SEO 博客来提升 Google 排名,核心是:先用正确关键词+站内结构“打底”,再用 SEONIB 把这个结构规模化,最后用 Search Console 做数据反馈并持续优化。 下面是一套可以直接在团队里照着做的“SEONIB…...

周红伟:OpenClaw+DeepSeek V4灰度+Mercor训练数据泄露,DeepSeek今天发布

Anthropic封杀OpenClawDeepSeek V4灰度Mercor训练数据泄露:4月4日AI圈三件事,每一件都在改规则 核心数据一览 前言 2026年4月4日,AI圈没有给任何人喘息的机会。昨天微软MAI三件套Qwen3.6Gemma 4三连爆的热度还没散,今天又来了三…...

Spring 事务从入门到精通:一篇搞定事务失效、传播行为、回滚规则(Spring系列10)

一、前言 在日常开发中,事务是保证数据一致性的核心手段。尤其是转账这类业务,必须保证「A减钱」和「B加钱」两个操作同成功、同失败,否则就会出现资金异常。 Spring 提供了一套完整的声明式事务解决方案,基于 AOP 实现&#xff0…...

计算机毕业设计:Python全国天气数据可视化与预测系统 Flask框架 多元线性回归 气象 天气 机器学习 爬虫 数据分析 可视化 深度学习(建议收藏)✅

博主介绍:✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌ > 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与…...

从VINS-Mono移植到ROS2受阻?手把手教你用源码在Ubuntu 22.04搭建ROS Noetic测试环境

在Ubuntu 22.04上源码构建ROS Noetic环境的完整指南 当算法工程师尝试将VINS-Mono从ROS迁移到ROS2时,经常会遇到各种兼容性问题。这时候,拥有一个原生的ROS Noetic环境进行对照测试就显得尤为重要。本文将详细介绍如何在Ubuntu 22.04上通过源码构建完整的…...

芯片设计必看:AHB总线SRAM控制器中的DFT/BIST实现详解

芯片设计必看:AHB总线SRAM控制器中的DFT/BIST实现详解 在芯片设计领域,存储器测试一直是验证环节的重中之重。SRAM作为片上缓存的核心部件,其可靠性直接影响整个系统的稳定性。而AHB总线作为AMBA架构中最常用的高性能总线,如何在其…...

胡桃讲编程・蓝屏急救进阶:磁盘修复 + 引导修复 + 网络修复,排除法根治顽固蓝屏

(微星 GL62M 7REX 地下程序员实操版 | 上期指令无效必看)哈喽各位自学开发、被蓝屏折磨到头疼的小伙伴们,我是胡桃~上一期咱们讲了三种高频蓝屏触发场景,还有系统修复的基础命令,不少朋友留言说&#xff1a…...

毫米波雷达避坑指南:IWR1443做手势识别时,为什么速度解模糊是关键一步?

毫米波雷达手势识别实战:破解IWR1443速度模糊难题的核心策略 当你在IWR1443毫米波雷达上实现手势控制时,是否遇到过这样的困扰——快速挥手动作导致系统识别轨迹突然跳变?这背后隐藏着一个关键的技术瓶颈:速度模糊问题。本文将深入…...

三菱FX3U六轴标准程序:实现3轴本体控制与3个1PG定位模块,轴点动控制、回零控制及定位功能...

三菱FX3U六轴标准程序,程序包含本体3轴控制,扩展3个1PG定位模块,一共六轴。 程序有轴点动控制,回零控制,相对定位,绝对定位。 另有气缸数个,一个大是DD马达控制的转盘,整个是转盘多工位流水作业…...

PHP 8.9扩展模块安全配置失效了吗?3类高危漏洞正在 silently hijack 你的生产环境

第一章:PHP 8.9扩展模块安全加固配置概览PHP 8.9(当前为前瞻预发布版本,基于PHP 8.3持续演进的实验性分支)在扩展模块层面引入了更严格的加载策略与运行时权限控制机制。安全加固的核心目标是:最小化默认启用扩展、强制…...

自定义类型(下)

上篇我们介绍了自定义类型中常用的结构体,那么自定义类型并不是由结构体一家独揽,除此之外还有位段,枚举,联合体......,本文将介绍剩下类型。位段位段的定义位段是基于结构体所实现的,它的基本结构和结构体…...

JavaScript相关内容

定义变量: let 变量名 值; var const 对比项varletconst作用域函数级块级 块级 变量提升提升且为 undefined提升但 TDZ 死区同 let 重复声明允许不允许 不允许 重新赋值可以可以不可以声明时赋值可先声明 可先声明 必须赋值数据类型&…...

西门子1200PLC与施耐德变频器Modbus通讯程序:实现变频启停、设定频率、读取电压、电流...

西门子1200plc与施耐德变频器modbus通讯程序,可以控制变频启停,设定频率,读取变频器电压、电流、运行频率,博图V14版本程序。直接上干货!今天咱们聊聊西门子S7-1200 PLC和施耐德ATV系列变频器的Modbus通讯实战。这个方…...

避坑指南:ESP32C3开发板音频系统常见问题排查(I2S+ES8311实战)

ESP32C3音频开发实战:ES8311芯片配置与I2S疑难解析 当你在深夜调试ESP32C3开发板的音频系统时,突然发现扬声器发出刺耳的噪声,或是麦克风捕捉到的声音断断续续——这种场景对嵌入式音频开发者来说再熟悉不过了。立创开发板上的ES8311编解码芯…...

Oracle EBS的帐套由“4C”构成,而华为MetaERP将其发展为“6C”

Oracle EBS的帐套由“4C”构成,而华为MetaERP将其发展为“6C”。这不仅是简单增加两个要素,更是一种核算架构理念的革新:从 “一维定式” 转向 “多维解耦” ,旨在解决大型企业在全球化、多元化发展中的数据标准化、精细化管理与自…...

小米6刷机全攻略:从解锁BL到Recovery刷入

1. 解锁BootLoader前的准备工作 小米6作为一代经典机型,至今仍有大量用户在使用。刷机可以带来更流畅的系统体验、更长的续航时间,或是尝鲜第三方ROM的乐趣。但在开始之前,我们需要做好充分准备。我刷过不下20台小米6,总结出几个关…...

MATLAB里画双移线总报错?手把手教你解决MPC轨迹跟踪仿真中的参考轨迹绘制难题

MATLAB双移线绘制报错全解析:从MPC轨迹跟踪到参考轨迹精准生成 引言:当MATLAB遇上双移线 在无人驾驶和车辆控制领域,双移线测试是评估车辆动态性能和控制器跟踪能力的黄金标准。作为MPC(模型预测控制)算法的学习者&…...

langchain学习--提示词

langchain提示词学习要点提示词(Prompt)在LangChain中扮演着核心角色,直接影响模型输出的质量和准确性。以下是关键学习方向和实践方法:基础结构设计明确指令:直接说明任务要求,例如"生成一份关于气候…...