Skip to content

Python OS 操作

Python 的 os 模块提供了一种方便的方式来与操作系统进行交互。它允许你执行许多常见的文件系统操作,如创建、删除、移动目录,以及获取文件信息等。os 模块是 Python 标准库的一部分,因此无需额外安装。

os 模块 vs os.path 子模块

  • os 模块: 主要包含与操作系统本身交互的函数,如目录操作、进程管理等。
  • os.path 模块: 是 os 的一个子模块,专门用于处理文件路径。使用 os.path 中的函数可以确保你的代码在不同操作系统(Windows, macOS, Linux)之间具有良好的可移植性,因为它会自动处理路径分隔符(\/)等问题。

常用 os 模块函数

python
import os

# 1. 获取当前工作目录 (Current Working Directory)
current_dir = os.getcwd()
print(f"Current Directory: {current_dir}")

# 2. 列出目录中的文件和子目录
# os.listdir('.') 表示列出当前目录的内容
print(f"Contents of current directory: {os.listdir('.')}")

# 3. 创建目录
# os.mkdir('new_folder') # 创建单层目录,如果已存在会报错
# os.makedirs('path/to/another_folder') # 创建多层目录

# 4. 更改当前工作目录
# os.chdir('new_folder')
# print(f"New Current Directory: {os.getcwd()}")
# os.chdir('..') # 返回上一级目录

# 5. 删除文件和目录
# with open('temp.txt', 'w') as f: f.write('temp')
# os.remove('temp.txt') # 删除文件
# os.rmdir('new_folder') # 删除空目录,如果非空会报错
# os.removedirs('path/to/another_folder') # 递归删除空目录

# 6. 重命名文件或目录
# os.rename('old_name.txt', 'new_name.txt')

常用 os.path 模块函数

使用 os.path 来操作路径是编写跨平台代码的关键。

路径拼接: os.path.join()

这是处理路径最重要的方法。它会根据你的操作系统智能地使用正确的路径分隔符来连接一个或多个路径部分。

python
# 在 Windows 上会是 'data\\files\\report.csv'
# 在 Linux/macOS 上会是 'data/files/report.csv'
file_path = os.path.join('data', 'files', 'report.csv')
print(f"Joined path: {file_path}")

检查路径存在性

  • os.path.exists(path): 如果路径存在,返回 True
  • os.path.isfile(path): 如果路径是一个存在的文件,返回 True
  • os.path.isdir(path): 如果路径是一个存在的目录,返回 True
python
print(f"Does '{file_path}' exist? {os.path.exists(file_path)}")
print(f"Is '.' a directory? {os.path.isdir('.')}")

路径拆分

  • os.path.basename(path): 返回路径的最后一部分(通常是文件名)。
  • os.path.dirname(path): 返回路径中除最后一部分外的所有内容(通常是目录路径)。
  • os.path.split(path): 将路径拆分为一个元组 (dirname, basename)
  • os.path.splitext(path): 将路径拆分为一个元组 (root, ext),其中 ext 是文件扩展名。
python
path = '/home/user/data/report.txt'

print(f"Basename: {os.path.basename(path)}") # report.txt
print(f"Dirname: {os.path.dirname(path)}")   # /home/user/data
print(f"Split: {os.path.split(path)}")     # ('/home/user/data', 'report.txt')
print(f"Splitext: {os.path.splitext(path)}") # ('/home/user/data/report', '.txt')

执行系统命令

os.system(command) 函数可以执行一个 shell 命令。

python
# 在 Linux/macOS 上会执行 ls -l
# 在 Windows 上会执行 dir
if os.name == 'nt': # 'nt' for Windows
    os.system('dir')
else:
    os.system('ls -l')

安全警告: 使用 os.system 时要非常小心,特别是当命令中包含来自用户输入的变量时,这可能会导致严重的安全漏洞(命令注入)。对于更复杂的子进程管理,推荐使用 subprocess 模块。

本站内容仅供学习和研究使用。