Python中如何让文件夹内的文件按Excel内的编号分类

如题,需要把文件夹列表按照 excel 内的资产编号匹配,并移动到对应的目录。求思路,想用 python 来做!谢谢~
Python中如何让文件夹内的文件按Excel内的编号分类

9 回复

我建议把 excel 里代表编号的那列导出为 csv,之后 python 读取后处理即可


我理解你的需求是想根据一个Excel文件中的编号,对另一个文件夹里的文件进行分类整理。通常这个Excel里会有一列是文件编号,另一列可能是分类名称。下面是一个完整的解决方案:

import os
import shutil
import pandas as pd
from pathlib import Path

def classify_files_by_excel(excel_path, source_folder, target_base_folder):
    """
    根据Excel中的编号对文件进行分类
    
    参数:
    excel_path: Excel文件路径,应包含'编号'和'分类'两列
    source_folder: 源文件夹路径,包含待分类的文件
    target_base_folder: 目标基础文件夹路径,分类后的文件夹将创建在此处
    """
    # 读取Excel文件
    df = pd.read_excel(excel_path)
    
    # 确保必要的列存在
    if '编号' not in df.columns or '分类' not in df.columns:
        raise ValueError("Excel文件必须包含'编号'和'分类'两列")
    
    # 创建编号到分类的映射字典
    mapping = dict(zip(df['编号'].astype(str), df['分类']))
    
    # 获取源文件夹中的所有文件
    source_path = Path(source_folder)
    files = list(source_path.glob('*'))
    
    # 遍历所有文件并进行分类
    for file_path in files:
        if file_path.is_file():
            # 获取文件名(不含扩展名)作为编号
            file_stem = file_path.stem
            
            # 检查该文件编号是否在Excel映射中
            if file_stem in mapping:
                category = mapping[file_stem]
                
                # 创建目标文件夹路径
                target_folder = Path(target_base_folder) / category
                target_folder.mkdir(parents=True, exist_ok=True)
                
                # 复制文件到目标文件夹
                target_path = target_folder / file_path.name
                shutil.copy2(file_path, target_path)
                print(f"已复制: {file_path.name} -> {category}/")
            else:
                print(f"跳过: {file_path.name} (未在Excel中找到对应编号)")

# 使用示例
if __name__ == "__main__":
    # 设置路径
    excel_file = "文件分类表.xlsx"  # 你的Excel文件
    source_dir = "待分类文件"       # 源文件夹
    target_dir = "已分类文件"       # 目标文件夹
    
    # 执行分类
    classify_files_by_excel(excel_file, source_dir, target_dir)

这个脚本的工作原理:

  1. 读取Excel文件,假设它有两列:‘编号’和’分类’
  2. 创建编号到分类的映射字典
  3. 遍历源文件夹中的所有文件
  4. 用文件名(不含扩展名)去匹配Excel中的编号
  5. 找到匹配的,就复制到对应的分类文件夹中

如果你的Excel列名不同,只需要修改第16行的列名检查和第19列的列名引用。如果文件名包含编号但不是完整文件名,你可能需要修改第30行的匹配逻辑。

确保先安装pandas:pip install pandas openpyxl

一句话建议:确保Excel中的编号和文件名能正确匹配。

命令行不行吗

造个轮子吧。

导出成文本,用 python 处理一下转成 shell 命令就行了

建议用 vba 生成批处理文件的内容

python<br>import xlrd<br>import os<br>import shutil<br>data = xlrd.open_workbook('yourexcel.xls')<br>table = data.sheets()[0]<br>data_source = "your data source"<br>save_folder_path = "your target save path"<br>for i in rang(table.nrows):<br> one_row = table.row_values(i)<br> product_id = one_row[0]<br> folder_name = one_row[1]<br> save_path = os.path.join(save_folder_path, product_id)<br> source_path = os.path.join(data_source, folder_name)<br> if not os.path.exists(save_path):<br> os.mkdir(save_path)<br> shutil.move(source_path, save_path)<br>
你提问之前请说的详细一些,你的 excel 表格的部分截图,包括你文件目录是什么样子的,上面的代码不保证能运行,你自己改改,需要安装 xlrd, pip install xlrd
python <a target="_blank" href="http://your_py_file.py" rel="nofollow noopener">your_py_file.py</a>

谢谢大神!

虽然你问的是 Python,不过这个问题 Excel 徒手一分钟搞定😂

1. 表头之类没用的扔掉,只留两列:源路径和目标路径
2. 最前面插一列,填充柄填上 move
3. 另存工作表,类型 CSV,文件名 “xxx.bat”(引号也要输入)
4. 在文件 xxx.bat 上右键选编辑,用记事本替换逗号为空格
5. 运行 xxx.bat

回到顶部