第二十课:更强大的工具箱 – 常用模块的应用 (datetime, os)

  • 时长: 90 分钟
  • 教学目标:
    • 复习模块的概念和 import 语句的使用。
    • 学习使用 datetime 模块,获取当前日期和时间,以及进行简单的日期时间操作。
    • 学习使用 os 模块,与操作系统进行简单的交互(比如获取当前工作目录,检查文件是否存在)。
    • 通过实际例子,理解标准库模块的实用性,以及如何查阅文档(简单介绍)。
    • 巩固通过 模块名.功能名 的方式使用模块中的工具。

课程内容

1. 复习与引入 (10 分钟)

  • 复习: 快速回顾模块的概念和 import 的用法(比如导入 mathrandom)。
  • 提出问题: 老师提问:“在通讯录程序里,如果我想在保存文件时,记录一下是什么时间保存的怎么办?如果我想知道我的程序文件放在电脑的哪个位置怎么办?或者我想知道某个文件在不在电脑里,不通过 try...except FileNotFoundError 的方式有没有别的办法?”
  • 引出新模块: 这些与时间、日期、文件系统、操作系统相关的功能,Python 都为我们准备了专门的“工具箱”,也就是模块。今天我们就来学习两个非常常用的标准库模块:datetime(处理时间日期)和 os(与操作系统交互)。

2. 时间和日期的魔法 – datetime 模块 (30 分钟)

  • 作用: datetime 模块提供了处理日期和时间的各种工具。
  • 导入: import datetime
  • 获取当前日期和时间: 使用 datetime.datetime.now()。注意这里是模块名 datetime 里面还有一个叫做 datetime 的对象(类型)。
    import datetime
    
    # 获取当前的日期和时间
    now = datetime.datetime.now()
    print("当前完整的日期和时间:", now)
    # 输出格式类似: 2023-10-27 10:30:00.123456 (年月日 时:分:秒.微秒)
    
  • 获取日期或时间部分:
    # 只获取日期部分
    today = datetime.date.today()
    print("今天的日期:", today)
    # 输出格式类似: 2023-10-27
    
    # 只获取时间部分
    current_time = datetime.datetime.now().time()
    print("当前的时间:", current_time)
    # 输出格式类似: 10:30:00.123456
    
  • 获取年、月、日、时、分、秒等: 可以通过日期或时间对象的属性获取。
    import datetime
    now = datetime.datetime.now()
    
    print("年份:", now.year)
    print("月份:", now.month)
    print("日期:", now.day)
    print("小时:", now.hour)
    print("分钟:", now.minute)
    print("秒钟:", now.second)
    # 还有 week_day, isoformat() 等更多功能,可以简单提一下
    
  • 创建特定的日期或时间:
    # 创建一个特定的日期
    my_birthday = datetime.date(2010, 5, 20) # 年, 月, 日
    print("我的生日:", my_birthday)
    
    # 创建一个特定的日期和时间
    meeting_time = datetime.datetime(2023, 11, 1, 14, 30, 0) # 年, 月, 日, 时, 分, 秒
    print("会议时间:", meeting_time)
    
  • 日期的加减 (timedelta): 可以对日期或时间进行加减运算,结果是一个时间差对象 timedelta
    today = datetime.date.today()
    yesterday = today - datetime.timedelta(days=1) # 昨天
    tomorrow = today + datetime.timedelta(days=1) # 明天
    next_week = today + datetime.timedelta(weeks=1) # 下周
    
    print("今天:", today)
    print("昨天:", yesterday)
    print("明天:", tomorrow)
    print("下周的今天:", next_week)
    
    # 计算两个日期之间相差几天
    date1 = datetime.date(2023, 1, 1)
    date2 = datetime.date(2023, 10, 27)
    delta = date2 - date1
    print(f"{date1} 到 {date2} 相差 {delta.days} 天")
    
  • 格式化日期时间: 将日期时间对象按照指定的格式转换为字符串(例如 年/月/日 时:分:秒)。使用 .strftime() 方法。
    now = datetime.datetime.now()
    # YYYY-MM-DD HH:MM:SS 格式
    formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
    print("格式化后的时间:", formatted_time)
    
    # MM/DD/YY HH:MM AM/PM 格式
    another_format = now.strftime("%m/%d/%y %I:%M %p")
    print("另一种格式:", another_format)
    

    (简单介绍几个常用的格式符号 %Y, %m, %d, %H, %M, %S, %I, %p 等)

  • 动手实践: 学生导入 datetime 模块,打印当前的日期和时间。 打印明天的日期。 计算自己出生日期到今天的总天数。 将当前时间按照 年-月-日 时:分 的格式打印出来。

3. 和操作系统打交道 – os 模块 (25 分钟)

  • 作用: os 模块提供了许多与操作系统交互的功能,比如文件和目录(文件夹)的操作、获取系统信息等。
  • 导入: import os
  • 获取当前工作目录: 你的 Python 程序正在哪个文件夹里运行。
    import os
    print("当前程序所在的文件夹路径:", os.getcwd()) # get current working directory
    
  • 改变当前工作目录: 可以让程序切换到另一个文件夹里进行文件操作等。
    # 假设有一个叫做 'test_folder' 的文件夹
    # os.chdir('test_folder') # change directory
    # print("切换后的文件夹路径:", os.getcwd())
    
  • 列出文件夹里的文件和子文件夹:
    print("当前文件夹里的内容:", os.listdir()) # 列出当前工作目录下的所有文件和文件夹名 (列表)
    # os.listdir('/path/to/another/folder') # 也可以列出指定路径下的内容
    
  • 创建和删除文件夹:
    # 创建一个新的文件夹
    # os.mkdir('new_folder') # 如果文件夹已存在会报错
    # print("已创建文件夹 new_folder")
    
    # 删除一个空的文件夹
    # os.rmdir('new_folder') # 只能删除空文件夹,如果文件夹不为空会报错
    # print("已删除文件夹 new_folder")
    
  • 检查文件或文件夹是否存在:
    # 检查文件是否存在
    file_name = "my_notes.txt" # 检查之前创建的文件
    if os.path.exists(file_name): # os.path 模块处理路径相关的功能
        print(f"文件 {file_name} 存在。")
    else:
        print(f"文件 {file_name} 不存在。")
    
    # 检查是不是文件
    if os.path.isfile(file_name):
         print(f"{file_name} 是一个文件。")
    
    # 检查是不是文件夹
    folder_name = "my_folder" # 假设存在
    if os.path.isdir(folder_name):
        print(f"{folder_name} 是一个文件夹。")
    
  • 拼接路径: 用正确的方式连接文件夹名和文件名,避免不同操作系统(Windows 用 \,Linux/macOS 用 /)的问题。
    folder = "documents"
    file = "report.txt"
    full_path = os.path.join(folder, file)
    print("拼接后的路径:", full_path) # 在 Windows 上可能是 documents\report.txt,在 Linux 上是 documents/report.txt
    
  • 重命名和删除文件:
    # 重命名文件
    # os.rename('old_name.txt', 'new_name.txt')
    
    # 删除文件
    # os.remove('temp_file.txt') # 如果文件不存在会报错
    
  • 讲解目的: 介绍 os 模块的一些基础但实用的功能,让学生知道程序可以和文件系统进行互动。 强调文件和文件夹操作需要小心,避免误删重要文件。
  • 动手实践: 学生导入 os 模块,打印当前工作目录。 列出当前文件夹下的所有文件和文件夹。 尝试检查一个已知存在或不存在的文件。

4. 课堂练习 (15 分钟)

让学生独立完成以下练习:

  • 练习 1: 编写一个程序,导入 datetime 模块,获取当前时间,并判断当前是上午还是下午(中午 12 点之前算上午)。
    import datetime
    now = datetime.datetime.now()
    current_hour = now.hour
    # TODO: 使用 if 判断小时数,打印上午或下午
    
  • 练习 2: 编写一个程序,导入 random 模块和 datetime 模块。生成一个 1 到 7 的随机整数,代表星期几(1 代表星期一)。然后打印出今天是星期几(使用 datetime 模块),并打印出随机生成的数字代表的是星期几。
  • 练习 3: 编写一个程序,导入 os 模块。要求用户输入一个文件名,检查这个文件是否存在于当前程序所在的文件夹中。如果存在,打印“文件已找到。”;如果不存在,打印“文件未找到。”(提示:使用 os.path.exists())。

5. 总结与提问 (5 分钟)

  • 回顾: 回顾本节课内容:模块的概念,import 导入,使用 模块名.功能名。 学习了 datetime 模块获取/操作日期时间、格式化,学习了 os 模块获取目录、列出文件、检查文件是否存在等。
  • 提问:
    • 如何获取当前的年份?
    • 如何计算 100 天后是哪一天?
    • 如何获取程序当前运行在电脑的哪个文件夹?
    • 如何检查一个文件是否在当前文件夹里?
    • 使用模块有什么好处?
  • 答疑: 回答学生问题。

6. 布置课后作业 (5 分钟)

  • 作业 1: 编写一个程序,导入 datetime 模块,计算你的生日距离今天还有多少天。(提示:创建生日的 datetime.date 对象,获取今天的 datetime.date 对象,相减得到 timedelta,获取 .days)。
  • 作业 2: 编写一个程序,导入 os 模块。让用户输入一个文件夹的路径(比如 . 代表当前文件夹)。列出该文件夹下所有文件和文件夹的名字。
  • 作业 3: 编写一个程序,导入 datetime 模块和 random 模块。随机生成一个日期(比如在 2020 年到 2024 年之间随机生成年月日),打印出这个随机日期。
  • 作业 4: (选做) 编写一个程序,导入 os 模块和 datetime 模块。创建一个新的文件夹,名字可以是当前日期的格式(例如 2023-10-27)。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。