第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天的文件。

« 上一篇 模块导入与使用 下一篇 » 自定义模块