本文目录导读:

可以的,实用脚本完全可以实现批量交换功能,具体取决于你想要交换的对象和交换方式,下面为你整理几种常见场景及对应的脚本方案。
批量交换文件名(最常用)
场景:批量交换两个文件的名字
# 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")
关键注意事项
- 备份:批量操作前一定要备份数据
- 事务安全:使用临时过渡文件/列避免数据丢失
- 幂等性:设计成可重复执行不产生副作用
- 匹配规则:确保文件或数据能正确配对
适合批量交换的实用工具
如果不想写脚本,也可以考虑:
- Excel:使用 Power Query 批量处理列交换
- Total Commander:插件支持批量文件重命名交换
- Notepad++:列编辑模式 + 宏录制批量交换
- SQL:一条
UPDATE语句配合临时列
需要我针对你的具体场景(文件?数据库?配置?),给出更精确的脚本吗?