Python基础与自动化脚本实战

🏷️ L1 📊 beginner ⏱️ 40分钟 🏷️ free,Python,自动化脚本,文件处理,系统管理,批处理,前沿

好的,各位同学,大家好!我是你们的Python全栈开发讲师。很高兴能和大家一起开启今天的课程——《Python基础与自动化脚本实战》。

在接下来的40分钟里,我不会带大家去啃枯燥的语法手册,而是会从一个真实的、能解决实际问题的角度出发,带大家领略Python的魅力。准备好了吗?让我们开始吧!

---

# Python基础与自动化脚本实战

一、概述

为什么要学习这个主题?

想象一下,你每天早上上班,需要手动打开10个网页,复制粘贴几十个文件,或者重复地修改几百个Excel表格的名字。这些事情枯燥、耗时,还容易出错。

在当今这个数据驱动的时代,重复性的、机械化的手动操作是效率的最大杀手。无论是运维工程师、数据分析师、测试人员,还是普通的办公人员,都面临着大量的“手工活”。

Python,就是解决这个问题的终极武器。 它语法简洁、拥有强大的标准库和第三方库,被誉为“胶水语言”,可以轻松地将各种系统工具、文件、网络服务“粘合”在一起,实现自动化。

行业背景:

学完本课程能做什么?

通过这40分钟的学习,你将具备以下能力:

1. 批量修改文件名: 瞬间给几百个图片或文档加上统一的日期前缀。 2. 自动化数据备份: 编写脚本,每天定时将重要文件夹压缩并复制到备份盘。 3. 自动发送报表邮件: 从数据库或文件中提取数据,生成图表,并自动发送给领导。 3. 系统健康检查: 写一个脚本,一键检查CPU、内存、磁盘使用率,并生成报告。 4. 定时执行任务: 让脚本在每天凌晨3点自动运行,而你只需要安心睡觉。

适合人群和前置知识要求

---

二、核心知识点

我们将通过4个核心模块,构建自动化脚本的基石。

模块一:Python语法与数据结构——脚本的“词汇”和“句子”

原理讲解: 编程语言就像自然语言一样,有自己的“词汇”(变量、数据类型)和“句子”(控制流)。Python的“词汇”非常丰富,我们重点学习最常用的几种。

关键技术对比:列表 vs 字典

| 特性 | 列表 (List) | 字典 (Dict) | | :--- | :--- | :--- | | 表示 | 方括号 [] | 花括号 {} | | 元素 | 有序的集合,用索引(0,1,2...)访问 | 无序的键值对,用访问 | | 示例 | names = [“小明”, “小红”, “小刚”] | person = {“name”: “小明”, “age”: 18} | | 访问 | names[0] 得到 “小明” | person[“name”] 得到 “小明” | | 适用场景 | 存储一系列相似的数据,如文件名列表 | 存储有映射关系的数据,如一个人的属性 |

代码示例:


# 1. 变量和数据类型
name = "张老师"  # 字符串
age = 30        # 整数
salary = 15000.50 # 浮点数
is_teacher = True # 布尔值

# 2. 列表:存储多个文件名 file_list = ["report_1.txt", "report_2.txt", "report_3.txt"] print(f"第一个文件是:{file_list[0]}") # 输出:第一个文件是:report_1.txt

# 3. 字典:描述一个文件的信息 file_info = { "name": "report_1.txt", "size": 1024, # 单位:KB "is_backup": False } print(f"文件 {file_info['name']} 的大小是:{file_info['size']} KB")

# 4. 循环:批量处理列表中的元素 for file in file_list: print(f"正在处理:{file}")


模块二:文件操作——脚本与硬盘的“桥梁”

原理讲解: 自动化脚本的核心就是操作文件。Python内置的open()函数是操作文件的万能钥匙。我们主要使用 with 语句,它能自动管理文件的打开和关闭,非常安全。

关键参数说明:open() 函数的模式

| 模式 | 描述 | | :--- | :--- | | 'r' | 读取模式(默认)。文件必须存在。 | | 'w' | 写入模式。如果文件存在,会覆盖内容;如果不存在,会创建新文件。 | | 'a' | 追加模式。在文件末尾添加内容,不会覆盖原有内容。 | | 'rb' / 'wb' | 二进制模式读取/写入(用于图片、视频等非文本文件)。 |

代码示例:


# 1. 读取文件内容
with open('my_data.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)

# 2. 写入内容到文件 with open('output.txt', 'w', encoding='utf-8') as f: f.write("这是第一行内容。\n") f.write("这是第二行内容。\n") print("文件写入成功!")

# 3. 追加内容 with open('output.txt', 'a', encoding='utf-8') as f: f.write("这是追加的一行。\n") print("内容追加成功!")


模块三:常用标准库——Python的“军火库”

原理讲解: Python的强大之处在于其“内置电池”(Batteries Included)的理念,即标准库。我们不需要自己写所有代码,直接导入别人写好的、经过测试的高质量模块即可。

  • **`os` 模块:** 与操作系统交互,如创建文件夹、获取路径、执行系统命令。
  • **`shutil` 模块:** 高级文件操作,如复制、移动、删除文件和整个目录。
  • **`datetime` 模块:** 处理日期和时间,非常方便。
  • **`subprocess` 模块:** 在Python脚本中运行外部程序或系统命令。

代码示例:


import os
import shutil
from datetime import datetime

# 1. 使用os模块创建文件夹 today = datetime.now().strftime("%Y-%m-%d") # 获取今天的日期字符串,如 "2023-10-27" backup_dir = f"backup_{today}" if not os.path.exists(backup_dir): os.makedirs(backup_dir) print(f"已创建备份文件夹:{backup_dir}")

# 2. 使用shutil复制文件 source_file = "important_data.txt" dest_file = os.path.join(backup_dir, "important_data_backup.txt") shutil.copy2(source_file, dest_file) # copy2会保留文件的元数据(修改时间等) print(f"文件已复制到:{dest_file}")

# 3. 使用datetime记录操作时间 print(f"备份完成时间:{datetime.now()}")


模块四:异常处理——让脚本更“健壮”

原理讲解: 程序运行中难免会遇到意外,比如文件找不到、网络断开、权限不足。如果不处理,程序会直接崩溃。try...except 语句就像一个“安全网”,可以优雅地捕获并处理这些错误,让程序继续运行下去。

代码示例:


import os

def read_file_safely(file_path): """安全地读取文件,如果出错则返回None""" try: with open(file_path, 'r', encoding='utf-8') as f: content = f.read() return content except FileNotFoundError: print(f"错误:文件 {file_path} 不存在!") return None except PermissionError: print(f"错误:没有权限读取文件 {file_path}!") return None except Exception as e: # 捕获其他所有类型的异常 print(f"发生未知错误:{e}") return None

# 测试 result = read_file_safely("一个不存在的文件.txt") if result is None: print("文件读取失败,但程序没有崩溃!")


---

三、实操步骤:构建一个“每日工作环境检查与备份”脚本

我们将把上面的知识点串联起来,写一个实用的自动化脚本。

目标: 每天早上运行此脚本,自动完成以下任务: 1. 检查当前目录下是否存在 data 文件夹,如果没有则创建。 2. 将 data 文件夹压缩成 zip 文件。 3. 在压缩包文件名上添加当天的日期。 4. 将压缩包移动到 backup 文件夹(如果没有则创建)。 5. 记录所有操作日志。

步骤:

1. 创建脚本文件: 在你的工作目录下,新建一个文本文档,命名为 daily_backup.py

2. 导入所需模块: 在文件顶部写入以下代码。


import os
import shutil
from datetime import datetime
import zipfile  # 用于创建zip压缩包

3. 定义关键路径和日期:


# 获取当前日期
today = datetime.now().strftime("%Y-%m-%d")

# 定义源文件夹和目标文件夹 source_dir = "data" backup_dir = "backup"


4. 创建目标文件夹(如果不存在):


if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
print(f"已创建备份文件夹:{backup_dir}")

5. 检查源文件夹是否存在:


if not os.path.exists(source_dir):
print(f"错误:源文件夹 '{source_dir}' 不存在!")
exit(1)  # 退出脚本,并返回错误代码1

6. 创建压缩包:


# 压缩包的文件名,例如:data_backup_2023-10-27.zip
zip_filename = f"data_backup_{today}.zip"
zip_path = os.path.join(backup_dir, zip_filename)

print(f"正在创建压缩包:{zip_path} ...") # 使用shutil.make_archive可以更简单地创建zip # 第一个参数是压缩包名(不含扩展名),第二个是格式,第三个是要压缩的目录 shutil.make_archive(base_name=zip_path.replace('.zip', ''), format='zip', root_dir=source_dir) print("压缩包创建成功!")


7. 记录日志:


log_filename = "backup_log.txt"
log_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_message = f"[{log_time}] 备份成功:{zip_filename}\n"

with open(log_filename, 'a', encoding='utf-8') as log_file: log_file.write(log_message)

print(f"日志已记录到:{log_filename}") print("所有任务完成!")


8. 运行脚本:

  • **Windows:** 在脚本所在目录的地址栏输入 `cmd` 并回车,然后在命令行中输入 `python daily_backup.py`。
  • **macOS / Linux:** 打开终端,`cd` 到脚本目录,输入 `python3 daily_backup.py`。

预期效果:

  • 你会看到命令行输出一系列提示信息。
  • 当前目录下会生成一个 `backup` 文件夹。
  • `backup` 文件夹内会有一个名为 `data_backup_2023-10-27.zip`(日期为当天)的压缩包。
  • 当前目录下会生成一个 `backup_log.txt` 文件,里面记录了刚才的操作。

---

四、常见问题与故障排查

1. 问题:运行脚本时提示 'python' 不是内部或外部命令,也不是可运行的程序

  • **判断思路:** 系统环境变量中没有配置Python的路径。
  • **解决方法:**
  • 重新安装Python,在安装向导中务必勾选“**Add Python to PATH**”。
  • 或者,找到Python的安装目录(如 `C:\Python39\`),将其下的 `Scripts` 文件夹路径添加到系统环境变量 `Path` 中。

2. 问题:运行脚本后,压缩包是空的。

  • **判断思路:** 压缩时指定的源文件夹路径不正确,或者源文件夹内没有文件。
  • **排查流程:**
1. 检查 source_dir = "data" 这个路径是否真实存在。 2. 检查 data 文件夹是否位于脚本所在的目录下。 3. 打开 data 文件夹,确认里面确实有文件。 4. 尝试在脚本中打印 os.path.abspath(source_dir) 来确认绝对路径。

3. 问题:脚本运行时报错 FileNotFoundError: [Errno 2] No such file or directory: 'backup_log.txt'

  • **判断思路:** 这不是真正的错误,而是 `open()` 函数以 `'r'` 模式打开文件时才会报错。我们的日志写入使用的是 `'a'` 模式,如果文件不存在,它会自动创建。
  • **排查流程:** 检查你的日志写入代码,确认使用的是 `'a'` (append) 模式而不是 `'r'` (read) 模式。如果使用了 `'r+'` 或 `'w'`,需要注意文件是否存在。

4. 问题:我想让脚本每天定时运行,而不需要手动执行。

  • **判断思路:** 这是定时任务的需求,需要借助操作系统的任务调度器。
  • **解决方法(Windows):**
1. 打开“任务计划程序”。 2. 创建基本任务,设置触发器为“每天”,时间设为凌晨3点。 3. 操作选择“启动程序”,程序或脚本选择 python.exe 的完整路径(如 C:\Python39\python.exe),添加参数选择你的脚本路径(如 C:\my_scripts\daily_backup.py)。
  • **解决方法(macOS / Linux):**
1. 在终端输入 crontab -e 编辑定时任务。 2. 添加一行:0 3 * * * /usr/bin/python3 /path/to/your/daily_backup.py

---

五、总结与扩展

重点知识回顾

1. 三大数据结构: 列表(有序集合)、字典(键值对)、字符串(文本)。它们是自动化脚本处理数据的基石。 2. 文件操作三剑客: open() 函数配合 'r''w''a' 模式,是读写文件的万能钥匙。永远记得使用 with 语句。 3. 标准库的力量: osshutildatetimesubprocess 等库,让你无需重复造轮子,直接调用系统能力。 4. 异常处理: try...except 是脚本的“安全带”,让程序在遇到错误时也能优雅地处理,而不是直接崩溃。 5. “脚本思维”: 将手动操作拆解成“输入 -> 处理 -> 输出”的流程,然后用代码实现这个流程。

实战中的最佳实践建议

  • **从简单开始:** 不要试图一次写完一个复杂的脚本。先实现一个核心功能,比如只复制文件,运行成功后再增加压缩、日志等功能。
  • **多用打印:** 在脚本的关键位置添加 `print()` 语句,打印出变量的值或“正在执行...”,这能帮你快速定位问题。
  • **写注释:** 即使脚本是给自己用的,一周后你也可能忘记某段代码的用途。用 `#` 写下简单的注释。
  • **版本控制:** 用Git来管理你的脚本,这样你可以随时回退到之前的版本。

推荐进一步学习的方向和资源

  • **深入学习:**
  • **数据处理:** 学习 `pandas` 库,处理Excel、CSV等表格数据。
  • **网络请求:** 学习 `requests` 库,编写爬虫或调用API。
  • **图形界面:** 学习 `PySimpleGUI` 或 `Tkinter`,为你的脚本做个简单的界面。
  • **学习资源:**
  • **官方文档:** Python官方文档是最好的老师。
  • **在线平台:** LeetCode(刷题)、Real Python(优质教程)。
  • **书籍:** 《Python编程:从入门到实践》(非常适合巩固基础)。

今天的课程到这里就结束了。希望大家不只是“看”会了,而是能动手把那个备份脚本写出来,并试着修改它,让它完成更多你需要的任务。编程是一门实践的艺术,动手敲代码,才是最快的进步方式!

有任何问题,欢迎随时交流。我们下次课再见!

在博海学习网开始学习 →