玩转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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2496843.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!