实用脚本能批量交换吗?

wen 实用脚本 59

本文目录导读:

实用脚本能批量交换吗?

  1. 批量交换文件名(最常用)
  2. 批量交换Excel/CSV列数据
  3. 批量交换两个文件夹的内容
  4. 批量交换数据库字段值
  5. 批量交换图片文件格式
  6. 关键注意事项
  7. 适合批量交换的实用工具

可以的,实用脚本完全可以实现批量交换功能,具体取决于你想要交换的对象和交换方式,下面为你整理几种常见场景及对应的脚本方案。

批量交换文件名(最常用)

场景:批量交换两个文件的名字

# rename_swap.py
import os
import glob
def batch_swap_names(pattern1, pattern2):
    """
    将两类文件两两交换名称
     a1.txt <-> b1.txt, a2.txt <-> b2.txt
    """
    files1 = sorted(glob.glob(pattern1))
    files2 = sorted(glob.glob(pattern2))
    if len(files1) != len(files2):
        print("文件数量不匹配!")
        return
    # 先用临时名过渡
    temp_names = []
    for f1, f2 in zip(files1, files2):
        temp = f"temp_{os.path.basename(f1)}"
        os.rename(f1, temp)
        temp_names.append((temp, f2, f1))
    for temp, f2, original in temp_names:
        os.rename(f2, original)
        os.rename(temp, f2)
    print(f"成功交换 {len(files1)} 对文件")
# 使用示例
batch_swap_names("photo_*.jpg", "pic_*.jpg")

批量交换Excel/CSV列数据

场景:将两列的所有数据互换

# swap_columns.py
import pandas as pd
def swap_columns_in_file(input_file, col_a, col_b, output_file=None):
    """
    交换Excel或CSV中两列的数据
    """
    if input_file.endswith('.csv'):
        df = pd.read_csv(input_file)
    else:
        df = pd.read_excel(input_file)
    # 交换两列数据
    df[col_a], df[col_b] = df[col_b].copy(), df[col_a].copy()
    output_file = output_file or f"swapped_{input_file}"
    if output_file.endswith('.csv'):
        df.to_csv(output_file, index=False)
    else:
        df.to_excel(output_file, index=False)
    print(f"已交换 {col_a} 和 {col_b} 列, 保存至 {output_file}")
# 使用示例
swap_columns_in_file("data.xlsx", "姓名", "年龄")

批量交换两个文件夹的内容

场景:交换两个目录下所有对应文件

# swap_dirs.py
import shutil
import os
from pathlib import Path
def swap_directories(dir_a, dir_b, backup=True):
    """
    交换两个目录的全部内容
    注意:需要先在其他地方创建临时目录
    """
    dir_a, dir_b = Path(dir_a), Path(dir_b)
    if not dir_a.exists() or not dir_b.exists():
        print("目录不存在")
        return
    temp_dir = Path(f"temp_swap_{os.urandom(4).hex()}")
    try:
        # 移动 A→临时, B→A, 临时→B
        shutil.move(str(dir_a), str(temp_dir))
        shutil.move(str(dir_b), str(dir_a))
        shutil.move(str(temp_dir), str(dir_b))
        print(f"成功交换 {dir_a} 和 {dir_b}")
    except Exception as e:
        print(f"出错: {e}")
        # 出错时自动恢复
        if temp_dir.exists():
            shutil.rmtree(str(temp_dir))
# 使用示例
swap_directories("folder_A", "folder_B")

批量交换数据库字段值

场景:MySQL/SQLite中交换两列

# swap_db_columns.py
import sqlite3
def swap_values_in_db(db_path, table, col_a, col_b):
    """
    交换数据库表中两列的所有值
    使用临时列作为中介
    """
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()
    try:
        # 添加临时列
        cursor.execute(f"ALTER TABLE {table} ADD COLUMN _temp TEXT")
        # 交换数据
        cursor.execute(f"UPDATE {table} SET _temp = {col_a}")
        cursor.execute(f"UPDATE {table} SET {col_a} = {col_b}")
        cursor.execute(f"UPDATE {table} SET {col_b} = _temp")
        # 删除临时列
        cursor.execute(f"ALTER TABLE {table} DROP COLUMN _temp")
        conn.commit()
        print(f"成功交换 {table} 表的 {col_a} 和 {col_b} 列")
    except Exception as e:
        conn.rollback()
        print(f"失败: {e}")
    finally:
        conn.close()
# 使用示例
swap_values_in_db("mydb.db", "users", "first_name", "last_name")

批量交换图片文件格式

场景:批量将PNG和JPG互转并交换

# swap_image_formats.py
from PIL import Image
import glob
import os
def batch_swap_image_formats(pattern_a, pattern_b):
    """
    将两类图片互相转换格式并交换文件名
     *.png → .jpg, *.jpg → .png
    """
    files_a = glob.glob(pattern_a)  # 如 "*.png"
    files_b = glob.glob(pattern_b)  # 如 "*.jpg"
    # 先转换A→B格式
    for f in files_a:
        img = Image.open(f)
        new_name = f.rsplit('.', 1)[0] + '.jpg'
        img.save(new_name)
    # 再转换B→A格式
    for f in files_b:
        img = Image.open(f)
        new_name = f.rsplit('.', 1)[0] + '.png'
        img.save(new_name)
    # 最后删除原文件并重命名
    for f in files_a:
        os.remove(f)
    for f in files_b:
        os.remove(f)
# 使用示例
batch_swap_image_formats("*.png", "*.jpg")

关键注意事项

  1. 备份:批量操作前一定要备份数据
  2. 事务安全:使用临时过渡文件/列避免数据丢失
  3. 幂等性:设计成可重复执行不产生副作用
  4. 匹配规则:确保文件或数据能正确配对

适合批量交换的实用工具

如果不想写脚本,也可以考虑:

  • Excel:使用 Power Query 批量处理列交换
  • Total Commander:插件支持批量文件重命名交换
  • Notepad++:列编辑模式 + 宏录制批量交换
  • SQL:一条 UPDATE 语句配合临时列

需要我针对你的具体场景(文件?数据库?配置?),给出更精确的脚本吗?

抱歉,评论功能暂时关闭!