第42集:常用内置模块
学习目标
- 掌握常用的Python内置模块
- 学会使用os模块进行文件和目录操作
- 掌握sys模块获取系统信息
- 学会使用json模块处理JSON数据
- 掌握time和datetime模块处理时间
一、os模块(操作系统接口)
基本概念
os模块提供了与操作系统交互的接口,可以用于文件和目录操作、路径处理等。
示例1:获取系统信息
import os
# 获取当前工作目录
print(f"当前目录:{os.getcwd()}")
# 获取操作系统类型
print(f"操作系统:{os.name}")
# 获取环境变量
print(f"用户名:{os.environ.get('USERNAME')}")
print(f"HOME路径:{os.environ.get('HOME')}")示例2:目录操作
import os
# 创建目录
os.makedirs("test_folder", exist_ok=True)
print("目录创建成功")
# 改变目录
# os.chdir("test_folder")
# print(f"当前目录:{os.getcwd()}")
# 列出目录内容
print("\n当前目录内容:")
for item in os.listdir("."):
print(f" {item}")
# 检查路径是否存在
print(f"\n'test_folder'存在:{os.path.exists('test_folder')}")
print(f"'test_folder'是目录:{os.path.isdir('test_folder')}")
print(f"'test_folder'是文件:{os.path.isfile('test_folder')}")
# 删除目录
# os.rmdir("test_folder") # 只能删除空目录示例3:路径操作
import os
# 拼接路径
path1 = os.path.join("folder", "file.txt")
print(f"拼接路径:{path1}")
# 获取绝对路径
abs_path = os.path.abspath("file.txt")
print(f"绝对路径:{abs_path}")
# 获取路径的各个部分
path = "/home/user/documents/file.txt"
print(f"目录:{os.path.dirname(path)}")
print(f"文件名:{os.path.basename(path)}")
print(f"扩展名:{os.path.splitext(path)[1]}")
# 检查路径
print(f"\n路径分隔符:{os.sep}")
print(f"行分隔符:{repr(os.linesep)}")二、sys模块(系统相关)
基本概念
sys模块提供了一些与Python解释器紧密相关的变量和函数。
示例4:获取系统信息
import sys
# Python版本
print(f"Python版本:{sys.version}")
print(f"版本信息:{sys.version_info}")
# 平台信息
print(f"\n平台:{sys.platform}")
print(f"最大递归深度:{sys.getrecursionlimit()}")
# 已加载的模块数量
print(f"\n已加载模块数:{len(sys.modules)}")示例5:命令行参数
import sys
# 获取命令行参数
print(f"脚本名称:{sys.argv[0]}")
print(f"参数个数:{len(sys.argv) - 1}")
if len(sys.argv) > 1:
print("参数列表:")
for i, arg in enumerate(sys.argv[1:], 1):
print(f" 参数{i}: {arg}")示例6:退出程序
import sys
def exit_with_code(code=0):
"""退出程序"""
print(f"程序即将退出,退出码:{code}")
sys.exit(code)
# 正常退出
# exit_with_code(0)
# 异常退出
# exit_with_code(1)三、json模块(JSON数据处理)
基本概念
json模块用于处理JSON(JavaScript Object Notation)格式的数据。
示例7:JSON序列化和反序列化
import json
# Python对象转JSON字符串(序列化)
data = {
"name": "小明",
"age": 25,
"city": "北京",
"hobbies": ["编程", "阅读", "旅行"]
}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print("Python对象转JSON:")
print(json_str)
# JSON字符串转Python对象(反序列化)
parsed_data = json.loads(json_str)
print("\nJSON转Python对象:")
print(parsed_data)示例8:读写JSON文件
import json
# 写入JSON文件
data = {
"students": [
{"name": "小明", "score": 90},
{"name": "小红", "score": 85}
]
}
with open("data.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print("JSON文件写入成功")
# 读取JSON文件
with open("data.json", "r", encoding="utf-8") as f:
loaded_data = json.load(f)
print("\n从JSON文件读取:")
print(loaded_data)四、time模块(时间处理)
基本概念
time模块提供了各种与时间相关的函数。
示例9:获取时间
import time
# 当前时间戳
print(f"当前时间戳:{time.time()}")
# 格式化时间
print(f"本地时间:{time.ctime()}")
print(f"结构化时间:{time.localtime()}")
# 格式化输出
formatted = time.strftime("%Y-%m-%d %H:%M:%S")
print(f"格式化时间:{formatted}")示例10:时间延迟
import time
print("开始倒计时:")
for i in range(5, 0, -1):
print(f" {i}...")
time.sleep(1)
print("完成!")
# 计算代码执行时间
start_time = time.time()
sum(range(1000000))
end_time = time.time()
print(f"\n执行时间:{end_time - start_time:.6f}秒")五、实际应用案例
案例1:文件备份工具
import os
import shutil
from datetime import datetime
def backup_file(source_path, backup_dir="backup"):
"""备份文件"""
# 创建备份目录
os.makedirs(backup_dir, exist_ok=True)
# 生成备份文件名
filename = os.path.basename(source_path)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
backup_name = f"{timestamp}_{filename}"
backup_path = os.path.join(backup_dir, backup_name)
# 复制文件
shutil.copy2(source_path, backup_path)
print(f"备份完成:{backup_path}")
# 使用示例
# backup_file("example.txt")案例2:配置文件管理器
import json
import os
class ConfigManager:
"""配置文件管理器"""
def __init__(self, filename="config.json"):
self.filename = filename
self.config = self.load()
def load(self):
"""加载配置"""
if os.path.exists(self.filename):
with open(self.filename, "r", encoding="utf-8") as f:
return json.load(f)
return {}
def save(self):
"""保存配置"""
with open(self.filename, "w", encoding="utf-8") as f:
json.dump(self.config, f, ensure_ascii=False, indent=2)
def get(self, key, default=None):
"""获取配置"""
return self.config.get(key, default)
def set(self, key, value):
"""设置配置"""
self.config[key] = value
self.save()
# 使用示例
config = ConfigManager()
config.set("database_host", "localhost")
config.set("database_port", 5432)
print(f"配置:{config.get('database_host')}")案例3:日志记录器
import os
import time
class SimpleLogger:
"""简单日志记录器"""
def __init__(self, filename="app.log"):
self.filename = filename
os.makedirs("logs", exist_ok=True)
self.log_path = os.path.join("logs", filename)
def log(self, level, message):
"""记录日志"""
timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] [{level}] {message}\n"
with open(self.log_path, "a", encoding="utf-8") as f:
f.write(log_entry)
print(log_entry.strip())
def info(self, message):
"""信息日志"""
self.log("INFO", message)
def warning(self, message):
"""警告日志"""
self.log("WARNING", message)
def error(self, message):
"""错误日志"""
self.log("ERROR", message)
# 使用示例
logger = SimpleLogger()
logger.info("程序启动")
logger.warning("内存使用率较高")
logger.error("数据库连接失败")六、课后练习
练习1
使用os模块列出当前目录下所有的.py文件。
练习2
使用json模块创建一个学生信息的JSON文件并读取。
练习3
使用time模块计算一个循环的执行时间。
练习4
使用sys模块获取命令行参数并根据参数执行不同操作。
练习5
结合多个模块实现一个文件清理工具,删除指定目录下超过7天的文件。