序言:为什么用Python实现自动化?

在现代工作环境中,重复性工作是消耗时间和精力的主要因素。如果能够自动化Excel文件整理、邮件发送、文件备份、数据收集等每天重复的工作,那该多好?Python是最适合这类自动化任务的编程语言。

Python最适合自动化的原因如下:

  • 简单的语法:类似英语的直观语法,即使是编程初学者也能快速学习。
  • 丰富的库:几乎所有任务都有相应的库,包括文件处理、网页爬虫、Excel操作、邮件发送等。
  • 跨平台:在Windows、Mac、Linux上都能同样运行。
  • 活跃的社区:遇到问题时,搜索就能找到大多数解决方案。
  • 免费:作为开源软件,任何人都可以免费使用。

在这个系列中,我们将逐步学习使用Python进行实用自动化的技术。在第一篇中,我们将介绍Python安装、开发环境配置、基本语法复习,以及编写第一个自动化脚本。

1. 安装Python

1.1 在Windows上安装Python

在Windows上安装Python的方法如下:

  1. 访问Python官方网站
  2. 点击"Download Python 3.x.x"按钮下载最新版本。
  3. 运行下载的安装文件。
  4. 重要!务必勾选"Add Python to PATH"复选框。
  5. 点击"Install Now"完成安装。

要验证安装,打开命令提示符(CMD)并输入以下命令:

python --version
pip --version

如果显示版本信息,则表示安装成功完成。

1.2 在Mac上安装Python

Mac默认安装了Python 2,但需要单独安装Python 3:

方法1:使用官方安装文件

  1. 从Python官方网站下载macOS版安装文件。
  2. 运行下载的.pkg文件进行安装。

方法2:使用Homebrew(推荐)

# 安装Homebrew(如果没有的话)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装Python
brew install python

1.3 在Linux上安装Python

大多数Linux发行版都默认安装了Python。如果需要最新版本:

Ubuntu/Debian:

sudo apt update
sudo apt install python3 python3-pip python3-venv

CentOS/RHEL:

sudo yum install python3 python3-pip

Fedora:

sudo dnf install python3 python3-pip

2. 虚拟环境配置

虚拟环境是为每个项目创建独立Python环境的工具。为什么需要虚拟环境?

  • 可以为每个项目使用不同版本的包。
  • 可以保持系统Python的整洁。
  • 可以清晰地管理项目依赖。

2.1 venv(内置)

Python 3.3及以上版本内置了venv模块:

# 创建虚拟环境
python -m venv myenv

# 在Windows上激活
myenv\Scripts\activate

# 在Mac/Linux上激活
source myenv/bin/activate

# 停用
deactivate

虚拟环境激活后,提示符前面会显示(myenv)。

2.2 virtualenv

virtualenv是提供更多功能的第三方工具:

# 安装virtualenv
pip install virtualenv

# 创建虚拟环境
virtualenv myenv

# 使用特定Python版本创建
virtualenv -p python3.11 myenv

3. pip和包管理

pip是Python的包管理器。可以轻松安装和管理所需的库。

3.1 基本命令

# 安装包
pip install requests

# 安装特定版本
pip install requests==2.28.0

# 升级包
pip install --upgrade requests

# 卸载包
pip uninstall requests

# 查看已安装的包列表
pip list

# 查看包信息
pip show requests

3.2 使用requirements.txt

将项目的依赖管理为文件,可以在其他环境中轻松安装相同的包:

# 将当前安装的包保存到requirements.txt
pip freeze > requirements.txt

# 批量安装requirements.txt中的包
pip install -r requirements.txt

requirements.txt示例:

requests==2.31.0
beautifulsoup4==4.12.2
openpyxl==3.1.2
python-dotenv==1.0.0

4. VS Code开发环境配置

Visual Studio Code是Python开发中最受欢迎的免费编辑器。

4.1 安装VS Code

  1. VS Code官方网站下载。
  2. 运行适合您操作系统的安装文件。

4.2 必要的扩展程序

打开VS Code,在扩展程序(Extensions)选项卡中安装以下内容:

  • Python(Microsoft):Python语言支持、调试、代码检查
  • Pylance(Microsoft):增强的代码自动完成和类型检查
  • Python Indent:自动缩进支持
  • autoDocstring:自动生成文档字符串

4.3 VS Code设置

在settings.json中添加以下设置可以获得更好的开发体验:

{
    "python.defaultInterpreterPath": "python",
    "python.formatting.provider": "black",
    "editor.formatOnSave": true,
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true
}

5. Python基本语法复习

让我们快速复习编写自动化脚本所需的核心语法。

5.1 变量和数据类型

# 基本数据类型
name = "Python"           # 字符串 (str)
version = 3.12            # 浮点数 (float)
count = 100               # 整数 (int)
is_active = True          # 布尔值 (bool)

# 集合数据类型
fruits = ["apple", "banana", "cherry"]    # 列表
coordinates = (10, 20)                     # 元组
person = {"name": "张三", "age": 30}       # 字典
unique_numbers = {1, 2, 3, 4, 5}          # 集合

# 类型检查
print(type(name))  # 

5.2 条件语句

age = 25

if age < 18:
    print("未成年人。")
elif age < 65:
    print("成年人。")
else:
    print("老年人。")

# 三元运算符
status = "成年人" if age >= 18 else "未成年人"

5.3 循环语句

# for循环
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

# 使用range
for i in range(5):
    print(i)  # 0, 1, 2, 3, 4

# 使用enumerate(同时获取索引和值)
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

# while循环
count = 0
while count < 5:
    print(count)
    count += 1

# 列表推导式
squares = [x**2 for x in range(10)]
even_numbers = [x for x in range(20) if x % 2 == 0]

5.4 函数

# 基本函数
def greet(name):
    return f"你好,{name}!"

# 默认参数
def greet_with_time(name, time="早上"):
    return f"{time}好,{name}!"

# 可变参数
def sum_all(*args):
    return sum(args)

# 关键字参数
def create_profile(**kwargs):
    return kwargs

# Lambda函数
square = lambda x: x ** 2
add = lambda x, y: x + y

# 使用示例
print(greet("张三"))
print(sum_all(1, 2, 3, 4, 5))
print(create_profile(name="李四", age=25, city="上海"))

5.5 异常处理

try:
    result = 10 / 0
except ZeroDivisionError:
    print("不能除以0。")
except Exception as e:
    print(f"发生错误:{e}")
else:
    print("执行成功。")
finally:
    print("始终执行。")

6. 编写第一个自动化脚本

现在让我们利用所学内容编写一个实用的自动化脚本。这是一个按扩展名整理指定文件夹中文件的脚本。

6.1 项目结构

file_organizer/
├── organize.py
├── requirements.txt
└── README.md

6.2 脚本代码

"""
文件整理自动化脚本
按扩展名分类指定文件夹中的文件。
"""

import os
import shutil
from datetime import datetime

# 扩展名到文件夹的映射
EXTENSION_FOLDERS = {
    # 图片
    '.jpg': 'Images',
    '.jpeg': 'Images',
    '.png': 'Images',
    '.gif': 'Images',
    '.bmp': 'Images',
    '.svg': 'Images',

    # 文档
    '.pdf': 'Documents',
    '.doc': 'Documents',
    '.docx': 'Documents',
    '.xls': 'Documents',
    '.xlsx': 'Documents',
    '.ppt': 'Documents',
    '.pptx': 'Documents',
    '.txt': 'Documents',

    # 视频
    '.mp4': 'Videos',
    '.avi': 'Videos',
    '.mkv': 'Videos',
    '.mov': 'Videos',

    # 音乐
    '.mp3': 'Music',
    '.wav': 'Music',
    '.flac': 'Music',

    # 压缩文件
    '.zip': 'Archives',
    '.rar': 'Archives',
    '.7z': 'Archives',
    '.tar': 'Archives',
    '.gz': 'Archives',

    # 程序
    '.exe': 'Programs',
    '.msi': 'Programs',
    '.dmg': 'Programs',
}

def get_folder_for_extension(extension):
    """返回扩展名对应的文件夹名。"""
    return EXTENSION_FOLDERS.get(extension.lower(), 'Others')

def organize_files(source_folder):
    """
    按扩展名整理指定文件夹中的文件。

    Args:
        source_folder: 要整理的文件夹路径

    Returns:
        整理的文件数量
    """
    if not os.path.exists(source_folder):
        print(f"错误:文件夹'{source_folder}'不存在。")
        return 0

    organized_count = 0

    # 遍历文件夹中的文件
    for filename in os.listdir(source_folder):
        file_path = os.path.join(source_folder, filename)

        # 跳过文件夹
        if os.path.isdir(file_path):
            continue

        # 提取扩展名
        _, extension = os.path.splitext(filename)

        if not extension:
            continue

        # 确定目标文件夹
        target_folder_name = get_folder_for_extension(extension)
        target_folder = os.path.join(source_folder, target_folder_name)

        # 如果目标文件夹不存在则创建
        if not os.path.exists(target_folder):
            os.makedirs(target_folder)
            print(f"创建文件夹:{target_folder_name}")

        # 移动文件
        target_path = os.path.join(target_folder, filename)

        # 处理同名文件
        if os.path.exists(target_path):
            name, ext = os.path.splitext(filename)
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            new_filename = f"{name}_{timestamp}{ext}"
            target_path = os.path.join(target_folder, new_filename)

        shutil.move(file_path, target_path)
        print(f"移动:{filename} -> {target_folder_name}/")
        organized_count += 1

    return organized_count

def main():
    """主执行函数"""
    print("=" * 50)
    print("文件整理自动化脚本")
    print("=" * 50)

    # 输入要整理的文件夹路径
    source_folder = input("请输入要整理的文件夹路径:").strip()

    if not source_folder:
        # 默认值:当前用户的下载文件夹
        source_folder = os.path.join(os.path.expanduser("~"), "Downloads")
        print(f"使用默认路径:{source_folder}")

    # 确认
    confirm = input(f"是否整理'{source_folder}'文件夹?(y/n):")

    if confirm.lower() != 'y':
        print("已取消。")
        return

    # 执行文件整理
    print("\n开始整理文件...\n")
    count = organize_files(source_folder)

    print("\n" + "=" * 50)
    print(f"完成!共整理了{count}个文件。")
    print("=" * 50)

if __name__ == "__main__":
    main()

6.3 运行脚本

# 运行脚本
python organize.py

7. 总结与下一篇预告

在这一篇中,我们奠定了Python自动化的基础。我们学到的内容总结如下:

  • Python适合自动化的原因
  • 在Windows、Mac、Linux上安装Python的方法
  • 虚拟环境(venv、virtualenv)的必要性和使用方法
  • 通过pip进行包管理
  • VS Code开发环境配置
  • Python基本语法复习
  • 编写第一个自动化脚本

下一篇预告:在Python自动化大师第2篇中,我们将深入探讨文件和文件夹自动化。将学习使用os模块、pathlib、shutil进行高级文件处理技术,并一起创建实用的文件整理项目!