Python中如何让文件夹内的文件按Excel内的编号分类
如题,需要把文件夹列表按照 excel 内的资产编号匹配,并移动到对应的目录。求思路,想用 python 来做!谢谢~
Python中如何让文件夹内的文件按Excel内的编号分类
我建议把 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)
这个脚本的工作原理:
- 读取Excel文件,假设它有两列:‘编号’和’分类’
- 创建编号到分类的映射字典
- 遍历源文件夹中的所有文件
- 用文件名(不含扩展名)去匹配Excel中的编号
- 找到匹配的,就复制到对应的分类文件夹中
如果你的Excel列名不同,只需要修改第16行的列名检查和第19列的列名引用。如果文件名包含编号但不是完整文件名,你可能需要修改第30行的匹配逻辑。
确保先安装pandas:pip install pandas openpyxl
一句话建议:确保Excel中的编号和文件名能正确匹配。
命令行不行吗
造个轮子吧。
建议用 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 xlrdpython <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


