2021-05-26

本文介绍了一种使用Python处理Excel文件,根据内容对附件进行分类的方法。首先,确保代码与附件、Excel在同一目录下,然后通过读取Excel获取分类依据。接着,遍历文件夹,筛选指定后缀的附件,并根据Excel数据将其移动到相应的分类文件夹中。最终,实现了自动化文件分类和管理的功能。
摘要由CSDN通过智能技术生成

通过Python读取excel对文件进行分类

(第一次写博客,格式不好看,见谅)
在学生工作过程中,遇到了这样一个问题:
有一个Excel,里面有项目作者的各种信息,Excel有不同的sheet,每个sheet都是一类,比如能源化工、数理、机械控制。另外还有从邮箱中下载的附件,数目很多。
如何才能利用我们学过的代码来解决呢?

首先,讲述一下代码思路
1、将python文件放在和附件、excel文件相同的目录下
2、确保压缩包的命名字符包含excel中的,比如,excel中是"基于balabala的balabala",那么压缩包至少要完全包含它,可以是"基于balabala的balabala_姓名_学号"等等
3、用一个函数读取并存储所有附件(我需要的是压缩包文件)
4、打开excel文件,读取所有数据data[i][j][k]表示第 i 个sheet的第 j 行的第 k 列元素
5、通过循环去判断目标文件在哪一类

思路很简单,接下来看看代码吧

# -*- coding: utf-8 -*-
"""
Created on Fri May 21 20:46:18 2021

@author: 晨旸熹微
"""
import os
import pandas as pd
import numpy as np 
import xlrd
import os
import shutil   # 用于移动复制文件

def create_dir(path):
    '''
    若不存在则创建一个文件夹,path是文件夹路径,只有名称的话仅在当前路径创建\n
    '''
    if not os.path.exists(path):
        os.mkdir(path)
        
def Get_fname(suffix):
    '''
    通过文件后缀名获得需要分类的附件\n
    suffix 文件后缀名,字符串格式,是一个列表\n
    '''
    name = []
    for root, dirs,files in os.walk(".",topdown = False):   # .表示在当前文件夹
        for file in files :
            i = os.path.join(root,file)
            suff=i.split('.')[-1]                   # 获得文件的后缀名
            if [True for i in suffix if suff in i]:   # 仅将后缀满足suffix的路径保存
                name.append(i[2:])                  # 从2开始是因为前面有\\
    return name

def Get_goal(excel_path,sheets,skip=1):
    '''
    获取excel文件的内容
    excel_path excel的文件名,需要在同一文件夹\n
    sheets 是excel的sheets数\n
    skip 第0行是表头,跳过\n
    '''
    data = [[] for i in range(sheets)]
    wb = xlrd.open_workbook(excel_path)
    for i,sheet in enumerate(wb.sheets()):
        [data[i].append(sheet.row_values(rownum)) for rownum in range(skip,sheet.nrows)]
    return data

def Get_result(data,file_name,F_name):
    '''
    data -- 读取的excel数据\n
    file_name -- 需要分类的文件名\n
    F_name -- 最后分类的名称(文件夹名称)\n
    '''
    result = [[] for i in range(len(F_name))]   # 每个列表就是一类的名字
    [create_dir(i) for i in F_name]
    num = 0   # 记录共分类了多少文件
    for i in range(len(data)):
        for j in range(len(data[i])):
            for k in file_name:
                if(data[i][j][1] in k):
                    result[i].append(k)
                    aa,bb=k.split(".")
                    oldname= u"C:\\Users\\23787\\Desktop\\分类文件\\"+aa+"."+bb
                    newname=u"C:\\Users\\23787\\Desktop\\分类文件\\"+F_name[i]+"\\"+aa+"."+bb
                    shutil.copyfile(oldname,newname)
                    num +=1
    return result,num

if __name__=="__main__":
    excel_path = "C:\\Users\\23787\\Desktop\\分类文件\\xxxx.xlsx"
    # 写上excel的路径,注意需要两个\\才能表示一个\
    data = Get_goal(excel_path,5,1)
    # data[i][j][1]是第i个表格第j行的第一列,我的文件中是目标文件名
    suffix=['rar','zip']           # 要分类的文件后缀名
    F_name = ["机械控制","信息技术","能源化工","数理","生命科学"]  # 分类的类别
    rar_name = Get_fname(suffix)
    result ,num= Get_result(data,rar_name,F_name)
   
   # [print(result[i]) for i in range(len(result))]
   # 用于分类打印结果,若文件过多则注释,防止用时过长
    print(f"共有文件{len(rar_name)}个")
    print(f"总共分类了{num}个文件")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2021-03-26 20:54:33,596 - Model - INFO - Epoch 1 (1/200): 2021-03-26 20:57:40,380 - Model - INFO - Train Instance Accuracy: 0.571037 2021-03-26 20:58:16,623 - Model - INFO - Test Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Best Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Save model... 2021-03-26 20:58:16,623 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 20:58:16,698 - Model - INFO - Epoch 2 (2/200): 2021-03-26 21:01:26,685 - Model - INFO - Train Instance Accuracy: 0.727947 2021-03-26 21:02:03,642 - Model - INFO - Test Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Best Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Save model... 2021-03-26 21:02:03,643 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 21:02:03,746 - Model - INFO - Epoch 3 (3/200): 2021-03-26 21:05:15,349 - Model - INFO - Train Instance Accuracy: 0.781606 2021-03-26 21:05:51,538 - Model - INFO - Test Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,538 - Model - INFO - Best Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,539 - Model - INFO - Save model... 2021-03-26 21:05:51,539 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 我有类似于这样的一段txt文件,请你帮我写一段代码来可视化这些训练结果
02-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值