如何根据CSV列值(site_number)将文件移动到对应目标目录
解决方案
方法1:Python 脚本(跨平台通用)
适合Windows、Linux、macOS所有系统,处理带特殊字符的文件名或CSV字段更稳定:
- 先自动创建目标目录,避免移动时出错
- 读取CSV建立「文件名-目标站点」的映射
- 遍历文件完成移动
import csv import os import shutil # 配置路径(根据实际情况修改) base_path = "./" fruit_folder = os.path.join(base_path, "fruit") target_folders = { "1": os.path.join(base_path, "fruit_1"), "2": os.path.join(base_path, "fruit_2"), "3": os.path.join(base_path, "fruit_3") } # 创建目标目录(不存在则自动创建) for folder in target_folders.values(): os.makedirs(folder, exist_ok=True) # 读取CSV,构建文件名映射 file_to_site = {} with open("your_data.csv", "r", newline="", encoding="utf-8") as csv_file: reader = csv.DictReader(csv_file) for row in reader: full_filename = f"{row['file_name']}.xyz" file_to_site[full_filename] = row["site_number"] # 执行移动操作 for filename in os.listdir(fruit_folder): if filename in file_to_site: site_num = file_to_site[filename] if site_num in target_folders: src = os.path.join(fruit_folder, filename) dest = os.path.join(target_folders[site_num], filename) shutil.move(src, dest) print(f"已移动 {filename} 到 {target_folders[site_num]}")
使用提示:
- 把
your_data.csv替换成你的实际CSV文件名 - 脚本只会处理CSV中有记录、且确实存在于
fruit目录的文件
方法2:Bash 脚本(Linux/macOS 适用)
类Unix系统下更轻量化的方案,适合快速处理简单CSV:
#!/bin/bash # 先创建目标目录 mkdir -p fruit_1 fruit_2 fruit_3 # 跳过CSV表头,逐行处理数据(假设分隔符是逗号) tail -n +2 your_data.csv | while IFS=, read -r file_name site_number; do target_file="fruit/${file_name}.xyz" # 检查文件存在再移动 if [ -f "$target_file" ]; then mv "$target_file" "fruit_${site_number}/" echo "Moved $target_file to fruit_${site_number}/" fi done
使用提示:
- 替换
your_data.csv为实际文件名 - 如果CSV用制表符分隔,把
IFS=,改成IFS=$'\t' - 若CSV字段包含逗号,建议改用Python方法避免出错
通用注意事项
- 操作前建议备份
fruit目录下的文件,防止误操作丢失数据 - 确保你有读取CSV、访问
fruit目录和写入目标目录的权限
内容的提问来源于stack exchange,提问作者sprc
相关产品推荐
相关产品推荐

