导读

你电脑里大概率已经装着 Python——它是目前全球最流行的编程语言之一,小到自动整理文件夹、批量改文件名,大到搭建网站和训练 AI 模型,都离不开它。本篇教程从零开始:先在你的系统上装上 Python3,搞清楚为什么要用虚拟环境(venv),快速过一遍核心语法,然后实战写一个批量处理文件的脚本。全程命令带注释,读完就能上手。

目标读者:完全没有编程经验的小白,或者用过 Python 但被报错劝退的朋友。
预计用时:阅读约 25 分钟 + 动手 30 分钟。


一、安装 Python3

1. Windows:官网安装包(推荐勾选 PATH)

打开浏览器访问 python.org/downloads,下载 Windows installer(64-bit)(页面会自动识别你的系统)。

双击运行安装程序时,务必勾选底部的「Add python.exe to PATH」(见截图标注位置)。如果漏勾也没关系——点「Modify」重新添加即可。

国内镜像提示:python.org 直连偶尔慢或超时,可以改用华为云镜像站 https://mirrors.huaweicloud.com/python/,里面也有最新的 Windows 安装包,下载速度通常更快。

2. macOS:brew 一行搞定

如果你已经装过 Homebrew(macOS 的包管理器),只需在终端输入:

brew install python3   # 下载并安装最新 Python3
python3 --version      # 验证:应显示 Python 3.x.x

如果没有 brew:运行 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 安装后再执行上面的 brew install python3

3. Linux:系统包管理器

大多数发行版已经把 Python3 作为默认组件:

# Debian / Ubuntu:
sudo apt update && sudo apt install python3 python3-venv python3-pip -y

# Fedora:
sudo dnf install python3 -y

# Arch Linux:
sudo pacman -S python python-pip

安装完成后同样用 python3 --version 验证。

小贴士:Ubuntu 20.04+ 已预装 Python3,无需额外安装。


二、为什么必须用虚拟环境(venv)?

一句话解释

虚拟环境 = 一个独立的 Python 小房间。你在里面装的库(package)只影响这个房间,不会碰脏系统或其他项目。

不用虚拟环境会怎样?

想象你有两个项目:

  • 项目 A 需要 requests==2.28.0
  • 项目 B 需要 requests==2.31.0

如果所有项目都共用同一个 Python 环境,装了 2.31 就会把 A 用的 2.28 覆盖掉——A 直接崩溃。这就是所谓的"依赖地狱"

创建和使用 venv

# 第 1 步:进入你的项目目录
cd my-project

# 第 2 步:创建一个名叫 .venv 的虚拟环境(点号开头表示隐藏)
python3 -m venv .venv

# 第 3 步:激活它(相当于"推开小房间的门")
# Windows CMD:
# my-project\.venv\Scripts\activate.bat
# Windows PowerShell:
my-project\.venv\Scripts\Activate.ps1
# macOS / Linux:
source .venv/bin/activate

# 激活成功后,命令行前面会出现 (.venv) 前缀:
# 这时候安装的库只会进这个环境,不会影响系统 Python!

退出虚拟环境非常简单:

deactivate   # 关上门,回到正常状态

PowerShell 权限说明(Windows):首次激活可能报"不允许执行脚本"的错误。这是因为 Windows 默认禁止运行未签名的 .ps1 文件。解决方法是执行 Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass——这里的 -Scope Process 意味着只对当前终端窗口生效,关闭 PowerShell 后策略自动恢复,不会动你的全局设置。


三、Python3 语法速览

下面挑最常用的语法,每行都带中文注释。你可以复制到一个 .py 文件里跟着跑。

3.1 变量和数据类型

name = "小明"           # str — 字符串(文字)
age = 25                # int — 整数
height = 1.78           # float — 浮点数(带小数)
is_student = True       # bool — 布尔值(True/False)
hobbies = ["读书", "游泳", "编程"]  # list — 列表(有序集合)
score = {"语文": 90, "数学": 85}    # dict — 字典(键值对映射)

3.2 条件判断

age = 20

if age >= 18:                    # 如果年龄>=18
    print("成年人")               # 执行这里
elif age >= 16:                  # 否则如果>=16
    print("青少年")
else:                            # 都不满足则执行这里
    print("未成年")

缩进规则:Python 用缩进(而不是大括号 {})来表示代码块。统一用 4 个空格,别混用 Tab。

3.3 循环

# for 循环:遍历列表里的每个元素
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:             # 读作:"对于 fruits 中的每一个 fruit"
    print(f"我喜欢吃{fruit}")    # f-string:字符串里嵌入变量

# while 循环:条件为 True 时一直重复
count = 0
while count < 3:                 # 当 count 小于 3 时继续
    print(f"计数:{count}")
    count += 1                   # 等价于 count = count + 1

3.4 函数

def greet(name, greeting="你好"):   # def 定义函数;greeting 有默认值
    """向某人问好(这是文档字符串,描述函数的用途)"""
    return f"{greeting}{name}!"  # return 返回结果

print(greet("小红"))                 # 输出:你好,小红!
print(greet("小刚", "早上好"))       # 输出:早上好,小刚!

3.5 列表推导式 & 字典推导式

推导式是一行写循环+筛选的神器:

# 列表推导式:生成 0~9 的平方数
squares = [x**2 for x in range(10)]        # 0, 1, 4, 9, 16, 25, 36, 49, 64, 81

# 带条件的列表推导式:只要偶数的平方
even_squares = [x**2 for x in range(10) if x % 2 == 0]  # 0, 4, 16, 36, 64

# 字典推导式:反向构建 {数字: 对应的中文}
chinese_map = {i: s for i, s in enumerate(["零","一","二","三","四","五","六","七","八","九"])}
# {0:'零', 1:'一', ..., 9:'九'}

四、实战:文件批量处理

学完基础语法,我们来做两件实际工作中经常遇到的事:批量重命名按扩展名整理文件

4.1 批量重命名:给文件加日期前缀

假设你的 Downloads 文件夹里有乱七八糟的图片,你想加上今天的日期编号:

import os
from datetime import datetime

target_dir = "./samples"                          # 目标文件夹(改成你自己的路径)
prefix = datetime.now().strftime("%Y%m%d")        # 今天日期如 "20260826"

files = os.listdir(target_dir)                    # 列出文件夹里所有文件名

for i, filename in enumerate(files):              # enumerate 同时给出序号(i)和文件名(filename)
    ext = os.path.splitext(filename)[1]           # 取出扩展名如 ".jpg"
    new_name = f"{prefix}_{i+1:03d}{ext}"         # 新名字:20260826_001.jpg
    old_path = os.path.join(target_dir, filename) # 旧完整路径
    new_path = os.path.join(target_dir, new_name) # 新完整路径
    os.rename(old_path, new_path)                 # 重命名(移动文件也是这招)

print(f"完成!重命名了 {len(files)} 个文件。")

关键模块解释

  • os:操作系统接口,提供文件/目录操作(列出、重命名、检查是否存在等)
  • os.path.splitext():把文件名拆成"主体+扩展名","photo.jpg"("photo", ".jpg")
  • os.rename():重命名或移动文件

4.2 按扩展名归类整理

import os, shutil                                   # shutil 提供高级文件操作(复制/移动)

target_dir = "./downloads"                          # 你要整理的文件夹
extension_map = {                                   # 扩展名 → 目标文件夹
    ".jpg": "images", ".png": "images", ".gif": "images", ".webp": "images",
    ".pdf": "documents",
    ".xlsx": "spreadsheets", ".csv": "spreadsheets",
    ".mp4": "videos", ".mp3": "audio",
}

for root, dirs, files in os.walk(target_dir):       # os.walk 递归遍历所有子文件夹
    for filename in files:
        _, ext = os.path.splitext(filename)          # 取扩展名
        dest_folder = extension_map.get(ext.lower()) # 查表(不区分大小写)

        if dest_folder:                               # 只在扩展名已知时处理
            dest_path = os.path.join(root, dest_folder, filename)
            os.makedirs(os.path.dirname(dest_path), exist_ok=True)  # 确保目标文件夹存在
            if not os.path.exists(dest_path):         # 避免同名覆盖
                shutil.move(os.path.join(root, filename), dest_path)

print("整理完毕!")

4.3 批量修改文本编码(常见坑:GBK vs UTF-8)

从网页下载或别的系统导出的文本文件,经常会因为编码不对导致乱码。下面的脚本把所有 .txt 文件转成 UTF-8:

import os, glob

for filepath in glob.glob("**/*.txt", recursive=True):   # 查找所有 txt 文件
    try:
        with open(filepath, "r", encoding="gbk") as f:  # 尝试用 GBK 读取(中文 Windows 常用)
            content = f.read()
    except UnicodeDecodeError:
        with open(filepath, "r", encoding="utf-8") as f: # GBK 不行就试 UTF-8
            content = f.read()
    else:
        with open(filepath, "w", encoding="utf-8") as f: # 统一保存为 UTF-8
            f.write(content)
        print(f"已转换:{filepath}")

编码小知识:UTF-8 是国际通用编码,几乎所有现代软件都用它。GBK 是中文版 Windows 的遗留编码。碰到乱码试试 encoding="gbk"encoding="utf-8" 或反过来。


五、requirements.txt 与 pip 换源

5.1 pip 是什么?

pip 是 Python 的包管理器——类似手机应用商店,专门用来安装别人写好的库(package)。比如你想用 Python 发 HTTP 请求,装一个 requests 库就行:

pip install requests   # 从官方仓库 PyPI 下载安装 requests

5.2 为什么需要 requirements.txt?

当你花了一下午装好一堆库后,换个电脑又要重装一遍?requirements.txt 就是你的"库清单",一行一个包名:

# requirements.txt 示例
requests==2.31.0
flask==3.0.0
beautifulsoup4==4.12.2

一键全部装回:

pip install -r requirements.txt   # 一次性安装清单上的所有库

5.3 pip 换源(提速神器)

默认情况下 pip 连接的是美国的 PyPI 官方服务器(pypi.org),在国内下载可能很慢。我们可以换成国内的镜像源:

# 临时换源(一次有效)
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

# 永久换源(配置一次,以后自动用清华镜像)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 阿里镜像也可以
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

换源优先级:清华源通常最快,但如果清华崩了就切阿里云做后备。建议都配一下。

5.4 Python 搭配 LLM API 能做很多自动化

学会上面这些,你已经能写不少实用的自动化脚本了。如果你的目标更进阶——比如让 Python 自动总结文章、自动生成回复、批量处理数据——那就需要接入 AI 模型(LLM)。

目前主流的大模型大多支持 OpenAI 兼容格式,也就是说同一套代码可以通过改一行 base_url 切换不同的服务商。这就带来一个实际需求:很多国内用户直接调用海外 API 会被限速或阻断。

这时候可以考虑使用云间 API 中转站(cloudzone-api.cyou),它提供 OpenAI 兼容 + Anthropic 兼容的双协议支持,接入了 90+ 个模型,全部国内直连无需翻墙,价格起步价低至官方 0.05 折,还有香港节点可用。对于经常需要用 Python 调用 AI 的场景,用它来搭 base_url 很方便——一行配置切换过去,省去自己部署的成本。

当然,日常的文件处理、爬虫、数据整理并不需要 AI 能力。上述的安装、语法和批量处理知识足以覆盖 80% 的自动化需求。等你觉得还不够的时候,再接入 API 也不迟。


六、总结

主题关键点
安装Windows 勾选 PATH;macOS 用 brew;Linux 用系统包管理器
venv独立隔离环境,防"依赖地狱";激活后装的东西不影响系统
核心语法变量/类型、if/elif/else、for/while、def 函数、列表/字典推导式
批量处理os.rename 重命名、shutil.move 归类、编码转换防乱码
pip + 换源pip install xxx 装库;pip config set 换清华/阿里镜像提速

到这里你已经完成了从"没装过 Python"到"能写批量处理脚本"的全部步骤。下一步可以尝试把一个真实场景的需求写成脚本,比如自动备份某个文件夹、自动抓取网页标题等。遇到卡壳的地方,搜索 “Python + 你的问题”,99% 的情况都有人遇到过。如果你想用 Python 接入 AI 能力(比如让程序自动总结文章),可以试试 云间 API 中转站,支持 OpenAI / Anthropic 双协议,价格低至官方 0.05 折,国内直连无需翻墙,配置一行 base_url 即可切换过去。


附:双版本一键脚本源码

以下脚本功能等价,分别适用于 Linux/macOS/WSL(.sh)和 Windows PowerShell(.ps1)。

  • .sh 做了什么:检测网络环境 → 检测 Python3 → 提示安装缺失组件 → 创建 venv 虚拟环境 → pip 装 requests(清华镜像优先,失败回退阿里云)→ 生成一个批量重命名示例脚本并运行
  • .ps1 做了什么:检测网络环境 → 检测 Python → 创建 venv → pip 换源(清华→阿里→官方回退链)→ 生成相同功能的批量重命名示例

两份脚本都公开源码、欢迎审查。不方便下载的同学可以直接复制下方代码,新建文本文档粘贴后改后缀为 .sh.ps1 运行。也可从 install-python3-guide.shinstall-python3-guide.ps1 下载。

Linux / macOS / WSL 版本

#!/usr/bin/env bash
set -u
# ============================================================
#  Python3 从零到脚本自动化 一键脚本(macOS / Linux / WSL)
#  公开源码,欢迎审查 —— 不放心可先复制给 AI 判断
# ============================================================

GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
CYAN='\033[0;36m'
NC='\033[0m'

info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; }
step()  { echo -e "${CYAN}[STEP]${NC} $1"; }

# --------------------------------------------------
# 1. 网络环境检测
# --------------------------------------------------
detect_network() {
  step "检测网络环境(国内 / 国外)..."
  if curl -fsI --max-time 5 "https://claude.ai" >/dev/null 2>&1; then
    info "可直连 claude.ai,判定为海外网络"
    echo "overseas"
  else
    warn "无法直连 claude.ai,判定为国内网络环境(将自动切换国内镜像源)"
    echo "domestic"
  fi
}

# --------------------------------------------------
# 2. 检测 Python3 是否已安装
# --------------------------------------------------
check_python3() {
  step "检查 Python3 环境..."
  local found=""
  for p in python3 python; do
    if command -v "$p" >/dev/null 2>&1; then
      local ver
      ver=$("$p" --version 2>&1)
      if echo "$ver" | grep -qE "3\.[0-9]+"; then
        found="$p"
        info "检测到 $ver"
        break
      fi
    fi
  done

  if [ -n "$found" ]; then
    PY="$found"
    return 0
  fi

  error "未找到 Python3!请先安装:\n"
  echo "  · Windows:去 https://www.python.org/downloads/ 下载,记得勾选 Add to PATH"
  echo "  · macOS:  brew install python3"
  echo "  · Ubuntu/Debian:sudo apt install python3 python3-venv python3-pip -y"
  echo "  · CentOS/Fedora:sudo dnf install python3 -y"
  echo ""
  echo "安装好后请重新运行本脚本。"
  return 1
}

# --------------------------------------------------
# 3. 创建虚拟环境
# --------------------------------------------------
setup_venv() {
  step "创建虚拟环境..."
  local venv_name=".venv"

  if [ -d "$venv_name" ]; then
    warn "虚拟环境 '$venv_name' 已存在,将复用"
  else
    if ! "$PY" -m venv "$venv_name"; then
      error "创建虚拟环境失败(pip 模块可能缺失,试试:sudo apt install python3-venv)"
      return 1
    fi
    info "虚拟环境创建成功:$venv_name/"
  fi

  # 获取虚拟环境内的 pip 路径
  if [ -f "$venv_name/bin/pip" ]; then
    PIP_CMD="$venv_name/bin/pip"
    ACTIVATE="$venv_name/bin/activate"
  elif [ -f "$venv_name/Scripts/pip" ]; then
    PIP_CMD="$venv_name/Scripts/pip"
    ACTIVATE="$venv_name/Scripts/activate"
  else
    error "找不到虚拟环境的 pip,目录结构异常"
    return 1
  fi

  VENV_PIP="$PIP_CMD"
  return 0
}

# --------------------------------------------------
# 4. pip 装库(带清华→阿里云→官方三重回退)
# --------------------------------------------------
install_package() {
  local pkg="$1"
  local net="$2"
  step "安装 $pkg ..."

  # 根据网络选择主镜像
  local primary_url
  if [ "$net" = "domestic" ]; then
    primary_url="https://pypi.tuna.tsinghua.edu.cn/simple"
  else
    primary_url="https://pypi.org/simple"
  fi

  # 备选源
  local backup_url="https://mirrors.aliyun.com/pypi/simple"

  # 第一次尝试:主镜像
  if $VENV_PIP install "$pkg" -i "$primary_url" --timeout 60 >/dev/null 2>&1; then
    info "$pkg 安装成功(源:$primary_url)"
    return 0
  fi

  warn "主源失败,回退到备用源:$backup_url"
  if $VENV_PIP install "$pkg" -i "$backup_url" --timeout 60 >/dev/null 2>&1; then
    info "$pkg 安装成功(源:$backup_url)"
    return 0
  fi

  warn "镜像源均失败,重试官方源(可能较慢)..."
  if $VENV_PIP install "$pkg" --timeout 120 >/dev/null 2>&1; then
    info "$pkg 安装成功(官方源)"
    return 0
  fi

  error "$pkg 安装失败。请手动检查:"
  echo "  1. 网络连接是否正常"
  echo "  2. 虚拟环境是否已正确激活"
  echo "  3. 手动尝试:$VENV_PIP install $pkg"
  return 1
}

# --------------------------------------------------
# 5. 生成批量重命名示例脚本
# --------------------------------------------------
generate_rename_script() {
  step "生成批量重命名示例脚本..."

  cat > rename_samples.sh << 'RENAME_EOF'
#!/usr/bin/env bash
# 批量重命名示例:给指定目录下的文件加日期前缀
# 用法:bash rename_samples.sh [目标目录]
# 默认处理当前目录下的 .txt 文件

TARGET_DIR="${1:-.}"
PREFIX=$(date +%Y%m%d)

echo "正在处理目录:$TARGET_DIR"
COUNT=0

for file in "$TARGET_DIR"/*.txt; do
  [ -f "$file" ] || continue
  BASENAME=$(basename "$file")
  EXT="${BASENAME##*.}"
  NAME="${BASENAME%.*}"
  COUNT=$((COUNT + 1))
  NEW_NAME="${PREFIX}_$(printf '%03d' $COUNT).${EXT}"
  mv "$file" "$TARGET_DIR/$NEW_NAME"
  echo "  ${BASENAME} → ${NEW_NAME}"
done

echo "共重命名 $COUNT 个文件。"
RENAME_EOF

  chmod +x rename_samples.sh
  info "示例脚本已生成:rename_samples.sh"
  echo "  使用方法:bash rename_samples.sh ./your-folder"

  # 在当前目录下也创建一个测试用的 .txt 文件来演示效果
  echo "test content 1" > samples_sample_1.txt
  echo "test content 2" > samples_sample_2.txt
  echo "test content 3" > samples_sample_3.txt
  info "创建了 3 个测试文件用于演示"

  # 运行重命名脚本
  step "运行批量重命名演示..."
  bash rename_samples.sh .
}

# --------------------------------------------------
# 主流程
# --------------------------------------------------
main() {
  echo "============================================"
  echo "  Python3 从零到脚本自动化 一键脚本"
  echo "  适用于 macOS / Linux / WSL"
  echo "============================================"
  echo ""

  local NET
  NET=$(detect_network)

  check_python3 || exit 1

  setup_venv || exit 1

  install_package "requests" "$NET" || warn "requests 安装失败(可选,不影响后续演示)"

  generate_rename_script

  echo ""
  echo "============================================"
  info "全部完成!"
  echo ""
  echo "下一步指引:"
  echo "  1. 激活虚拟环境:source .venv/bin/activate"
  echo "  2. 查看重命名结果:ls *.txt 或 ls *${DATESTAMP:-2*}"
  echo "  3. 卸载不需要的库:pip uninstall requests"
  echo "  4. 导出依赖清单:pip freeze > requirements.txt"
  echo "============================================"
}

main "$@"

Windows PowerShell 版本

# ============================================================
#  Python3 从零到脚本自动化 一键脚本(Windows PowerShell)
#  公开源码,欢迎审查 -- 不放心可先复制给 AI 判断
# ============================================================

$ErrorActionPreference = "Stop"

function Write-Info  { Write-Host "[INFO] $args" -ForegroundColor Green }
function Write-Warn  { Write-Host "[WARN] $args" -ForegroundColor Yellow }
function Write-Err   { Write-Host "[ERROR] $args" -ForegroundColor Red }
function Write-Step  { Write-Host "[STEP] $args" -ForegroundColor Cyan }

# --------------------------------------------------
# 1. 网络环境检测
# --------------------------------------------------
function Detect-Network {
    Write-Step "检测网络环境(国内 / 国外)..."
    try {
        $null = Invoke-WebRequest -Uri "https://github.com" -Method Head -TimeoutSec 5 -UseBasicParsing
        Write-Info "可直连 github.com,判定为海外网络"
        return "overseas"
    } catch {
        Write-Warn "无法直连 github.com,判定为国内网络环境(将自动切换国内镜像源)"
        return "domestic"
    }
}

# --------------------------------------------------
# 2. 检测 Python
# --------------------------------------------------
function Check-Python {
    Write-Step "检查 Python 环境..."
    $found = $null

    foreach ($cmd in @("python", "py", "python3")) {
        try {
            $verStr = & $cmd --version 2>&1
            if ($verStr -match "3\.(\d+)") {
                $found = $cmd
                Write-Info "检测到 $($verStr.Trim())"
                break
            }
        } catch {
            continue
        }
    }

    if ($found) {
        $script:PYTHON_CMD = $found
        return $true
    }

    Write-Err "未找到 Python!请先安装:`n"
    Write-Host "  Windows:去 https://www.python.org/downloads/ 下载"
    Write-Host "  重要:安装时务必勾选 'Add python.exe to PATH'"
    Write-Host "  或使用 winget:winget install Python.Python.3`n"
    return $false
}

# --------------------------------------------------
# 3. 创建虚拟环境
# --------------------------------------------------
function Setup-Venv {
    Write-Step "创建虚拟环境..."
    $venvName = ".venv"

    if (Test-Path (Join-Path "." $venvName)) {
        Write-Warn "虚拟环境 '$venvName' 已存在,将复用"
    } else {
        & $script:PYTHON_CMD -m venv $venvName
        if ($LASTEXITCODE -ne 0) {
            Write-Err "创建虚拟环境失败(请确保 Python 安装了 venv 模块)"
            return $false
        }
        Write-Info "虚拟环境创建成功:$venvName/"
    }

    $script:VENV_PATH = Join-Path "." $venvName
    $script:PIP_CMD = Join-Path $script:VENV_PATH "Scripts\pip.exe"

    # 检查是否在 PowerShell 中运行——如果是,可能需要临时放宽执行策略
    $shell = $Host.UI.RawUI.WindowTitle
    if ($shell -match "PowerShell" -or $PSVersionTable.PSVersion.Major -ge 5) {
        $currentPolicy = Get-ExecutionPolicy -Scope Process
        if ($currentPolicy -eq "Restricted") {
            Write-Warn "PowerShell 执行策略为 Restricted,临时设为 Bypass(仅当前会话有效,关闭窗口恢复)"
            Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force
        }
    }

    return $true
}

# --------------------------------------------------
# 4. pip 装库(清华→阿里云→官方三重回退)
# --------------------------------------------------
function Install-Package {
    param([string]$Pkg, [string]$Network)

    Write-Step "安装 $Pkg ..."

    $primaryUrl = if ($Network -eq "domestic") {
        "https://pypi.tuna.tsinghua.edu.cn/simple"
    } else {
        "https://pypi.org/simple"
    }

    $backupUrl = "https://mirrors.aliyun.com/pypi/simple"

    # 第一次尝试:主镜像
    try {
        & $script:PIP_CMD install $Pkg -i $primaryUrl --timeout 60 | Out-Null
        if ($LASTEXITCODE -eq 0) {
            Write-Info "$Pkg 安装成功(源:$primaryUrl)"
            return $true
        }
    } catch {
        Write-Warn "主源失败:$_"
    }

    Write-Warn "回退到备用源:$backupUrl"
    try {
        & $script:PIP_CMD install $Pkg -i $backupUrl --timeout 60 | Out-Null
        if ($LASTEXITCODE -eq 0) {
            Write-Info "$Pkg 安装成功(源:$backupUrl)"
            return $true
        }
    } catch {
        Write-Warn "备用源失败:$_"
    }

    Write-Warn "重试官方源(可能较慢,请耐心等待)..."
    try {
        & $script:PIP_CMD install $Pkg --timeout 120 | Out-Null
        if ($LASTEXITCODE -eq 0) {
            Write-Info "$Pkg 安装成功(官方源)"
            return $true
        }
    } catch {
        Write-Err "$Pkg 安装失败。请手动检查网络和代理设置。"
        return $false
    }
}

# --------------------------------------------------
# 5. 生成批量重命名示例脚本
# --------------------------------------------------
function Generate-RenameScript {
    Write-Step "生成批量重命名示例脚本..."

    $renameScript = @'
@echo off
REM 批量重命名示例(Windows CMD):给指定目录下的文件加日期前缀
REM 用法:rename_samples.bat [目标目录]
setlocal enabledelayedexpansion

set TARGET_DIR=%~1
if "%TARGET_DIR%"=="" set TARGET_DIR=.

set PREFIX=%date:~0,4%%date:~5,2%%date:~8,2%
set COUNT=0

for %%F in ("%TARGET_DIR%\*.txt") do (
    set /a COUNT+=1
    set FILE=%%~nxF
    set EXT=%%~xF
    set NAME=%%~nF
    set NEW_NAME=!PREFIX!_!COUNT!00!EXT!
    ren "!FILE!" "!NEW_NAME!"
    echo   !FILE! -> !NEW_NAME!
)

echo 共重命名 %COUNT% 个文件。
@endlocal
'@

    $renamePath = Join-Path "." "rename_samples.bat"
    Set-Content -Path $renamePath -Value $renameScript -Encoding ASCII
    Write-Info "批处理示例已生成:rename_samples.bat"
    Write-Host "  使用方法:rename_samples.bat \`./your-folder"

    # 创建测试文件
    "test content 1" | Out-File -FilePath "samples_sample_1.txt" -Encoding ASCII
    "test content 2" | Out-File -FilePath "samples_sample_2.txt" -Encoding ASCII
    "test content 3" | Out-File -FilePath "samples_sample_3.txt" -Encoding ASCII
    Write-Info "创建了 3 个测试文件用于演示"

    # 用 PowerShell 做重命名演示
    Write-Step "运行批量重命名演示..."
    $today = Get-Date -Format "yyyyMMdd"
    $count = 0
    Get-ChildItem -Filter "*.txt" | Where-Object { $_.Name -like "samples_sample_*" } | ForEach-Object {
        $count++
        $ext = $_.Extension
        $newName = "$today_{0:D3}$ext" -f $count
        Rename-Item $_.FullName (Join-Path $_.Directory $newName)
        Write-Host "  $($_.Name) -> $newName"
    }
    Write-Info "共重命名 $count 个测试文件"
}

# --------------------------------------------------
# 主流程
# --------------------------------------------------
Write-Host "============================================" -ForegroundColor Cyan
Write-Host "  Python3 从零到脚本自动化 一键脚本" -ForegroundColor Cyan
Write-Host "  适用于 Windows PowerShell" -ForegroundColor Cyan
Write-Host "============================================" -ForegroundColor Cyan
Write-Host ""

$network = Detect-Network

if (-not (Check-Python)) {
    Write-Err "Python 未安装,脚本终止。请先安装后重跑。"
    exit 1
}

if (-not (Setup-Venv)) {
    Write-Err "虚拟环境创建失败,脚本终止。"
    exit 1
}

Install-Package -Pkg "requests" -Network $network | Out-Null

Generate-RenameScript

Write-Host ""
Write-Host "============================================" -ForegroundColor Green
Write-Info "全部完成!"
Write-Host "============================================" -ForegroundColor Green
Write-Host ""
Write-Host "下一步指引:" -ForegroundColor White
Write-Host "  1. 激活虚拟环境:.venv\Scripts\Activate.ps1"
Write-Host "  2. 查看重命名结果:dir *.txt"
Write-Host "  3. 卸载不需要的库:.venv\Scripts\pip uninstall requests"
Write-Host "  4. 导出依赖清单:.venv\Scripts\pip freeze > requirements.txt"
Write-Host "  5. 如需长期启用脚本执行:Set-ExecutionPolicy -Scope CurrentUser RemoteSigned"
Write-Host "     (RemoteSigned 允许运行本地编写的脚本;恢复用 Unrestricted 或 Restricted)"

公开声明:以上所有脚本均为开源代码,没有任何隐藏逻辑或不信任操作。你可以把代码全文复制给任何 AI 工具审查,或逐行阅读确认。遇到任何问题欢迎反馈。