Python自动化办公应用学习笔记42——os模块2

六、系统信息

属性/方法

说明

示例输出

平台差异

os.name

操作系统类型

'nt' (Windows) / 'posix' (Linux/Mac)

核心标识

os.environ

环境变量字典

print(os.environ['PATH'])

可修改

os.getlogin()

当前登录用户

user = os.getlogin()

Windows/Linux

os.cpu_count()

CPU核心数

print(os.cpu_count()) → 8

os.sep

路径分隔符

\ (Windows) / (Linux)

跨平台开发重要


七、进程管理

方法

说明

示例

风险等级

os.system(command)

执行系统命令

os.system("calc.exe")

中 (避免用户输入)

os.startfile(path)

用关联程序打开

os.startfile("report.pdf")

os.popen(command)

执行命令并获取输出

output = os.popen("dir").read()

高 (潜在注入风险)

os.kill(pid, sig)

结束进程

os.kill(1234, 9)

高 (需进程ID)

# 禁止直接执行用户输入的指令

user_input = input("请输入命令:") # 危险操作!

os.system(user_input) # 可能执行恶意命令

八、目录遍历

os.walk(top) - 递归遍历目录树

for root, dirs, files in os.walk("Project", topdown=True):

print(f"当前目录: {root}")

print(f"包含子目录: {dirs}") # 可修改实现过滤

print(f"包含文件: {files}")

print("-" * 30)

参数说明:

topdown=False:自底向上遍历

修改dirs列表可实现目录过滤

# 跳过.git目录

if '.git' in dirs:

dirs.remove('.git') # 修改后walk将跳过


九、文件元数据

方法

说明

示例

返回值处理

os.path.getsize(p)

文件大小(字节)

size = path.getsize("data.zip")

需格式化显示

os.path.getmtime(p)

最后修改时间

mtime = path.getmtime("log.txt")

时间戳格式

os.path.getctime(p)

创建时间

ctime = path.getctime("file.doc")

Windows专用

os.stat(path)

获取完整属性

info = os.stat("data.bin")

返回stat对象

# 格式化显示文件信息

from datetime import datetime


mtime = path.getmtime("report.docx")

print("最后修改:", datetime.fromtimestamp(mtime).strftime("%Y-%m-%d %H:%M"))

print("文件大小:", round(path.getsize("report.docx")/1024, 2), "KB")

实践技巧

1. 路径拼接:始终使用os.path.join()
"folder" + "/" + "file.txt"
path.join("folder", "file.txt")

2. 路径检查:操作前验证

target = "important.xlsx"

if not path.exists(target):

print(f"警告: {target} 不存在!")

3. 递归操作:优先用os.walk()而非手动递归

4. 批量处理:os.listdir() + path.join()黄金组合

for file in os.listdir("docs"):

full_path = path.join("docs", file) # 关键步骤

if path.isfile(full_path):

process_file(full_path)

5. 安全删除:先验证类型再操作

def safe_remove(target):

if path.isfile(target):

os.remove(target)

elif path.isdir(target):

shutil.rmtree(target) # 需import shutil

6. 跨平台开发

使用os.sep替代硬编码分隔符

避免Windows路径驱动符(C:)

7. 环境变量

# 安全获取环境变量

home_dir = os.environ.get('HOME', os.environ.get('USERPROFILE', ''))

8. 时间处理

from datetime import datetime

mtime = datetime.fromtimestamp(path.getmtime("file"))

9. 错误处理

try:

os.mkdir("new_dir")

except FileExistsError:

print("目录已存在")

10. 替代方案

复杂操作用shutil模块(文件复制/压缩等)

路径操作用pathlib(面向对象路径处理)

典型应用场景

1. 批量重命名

# 给PDF文件添加日期前缀

for filename in os.listdir("invoices"):

if filename.lower().endswith(".pdf"):

new_name = f"2023_{filename}"

os.rename(

path.join("invoices", filename),

path.join("invoices", new_name)

)

2. 清理临时文件

# 删除超过30天的临时文件

import time

now = time.time()

for file in os.listdir("temp"):

file_path = path.join("temp", file)

if path.isfile(file_path):

if now - path.getmtime(file_path) > 30*86400: # 30天

os.remove(file_path)

3. 构建项目结构

# 创建标准项目目录

project_dirs = ["docs", "src", "data/raw", "data/processed"]

for dir in project_dirs:

os.makedirs(path.join("new_project", dir), exist_ok=True)


终极提示

1. 路径处理推荐使用原始字符串r"C:\data"

2. 在Python 3.4+中,pathlib模块提供更面向对象的路径操作

from pathlib import Path

Path("docs") / "report.docx" # 更直观的路径操作


3. 危险操作(如删除、执行命令)务必添加确认环节