python实践——根据关键词筛选指定文件(真的是干大事了哈哈哈)

对我来说的第一个大工程——利用python批量处理文件

  • 我是一个又懒又爱钻研的人,啥都懒得拿起来,拿起来又放不下,其实还是蛮辛苦的。从小面对数学问题,要么看不见它,看见了就要解决它。但我会主动去找题目做吗?也不会,因为懒得找。以至于后来,用我们那的话讲“一瓶子不满,半瓶子晃荡”。2009年参加全国高中数学联赛,因为3分,与一等奖失之交臂,一直成为我心头的痛。好在命运对我不薄,现在虽然忙碌,但一直与有能力且善良的人共事,也算得圆满。感慨有点多呢,言归正传~

背景

因为疫情影响,我们又双叒叕回归到线上学习模式。考试过后部分文件(答题卡)不能以纸质版的形式发到各位同学的手中,所以采用电子版。但电子版是以校为单位,将整个年级的同一个学科都放在同一个文件夹下,名单也是打乱的,我们需要将整个文件按班级分类,再由对应班级的学科老师发给自己的学生。

  • 那么今天所谓的“大工程”是什么呢?就是给文件“分班”:
    首先看下源文件夹,就这样年级中总共几百号人,每个人有4个文件:

原文件

步骤如下:

  1. 建立班级的excel,比如10个班,可以在一个excel中创建10个sheet表。每一个sheet中都是该班级的学生名单(便于后面筛选);
  2. 建立好班级以后,我们就可以进行筛选啦:
  • 准备工作1:找到要搜索的地方和搜索完的目的地存放地址
import os
import shutil
import xlrd
src_dir_path = '/Users/carla/Desktop/2020网上学习资料/成绩/答题卡(数学)'         # 源文件夹

to_dir_path = '/Users/carla/Desktop/4班答题卡们'       # 存放复制文件的文件夹
  • 准备工作2:用xlrd读取带有关键字的表格
path='/Users/carla/Desktop/4班名单.xlsx' # 名单就是要的关键字
wb = xlrd.open_workbook(path)
sh = wb.sheet_by_name("Sheet1")
nrows = sh.nrows   # 获取行数
print(nrows)       # 输出行数
  • 引入for循环:
t = ()          # 建立一个空元组
for i in range(nrows):
        t = t+tuple(sh.row_values(i))
print(t)
for key in t:
        if not os.path.exists(to_dir_path):
                print("to_dir_path not exist,so create the dir")
                os.mkdir(to_dir_path, 1)
        if os.path.exists(src_dir_path):
                print("src_dir_path exitst")
                for file in os.listdir(src_dir_path):
                        # is file
                        if os.path.isfile(src_dir_path + '/' + file):
                                if key in file:
                                        print('找到包含"' + key + '"字符的文件,绝对路径为----->' + src_dir_path + '/' + file)
                                        print('复制到----->' + to_dir_path + file)
                                        shutil.copy(src_dir_path + '/' + file, to_dir_path + '/' + file)

注意:为什么用元组不用列表呢?因为如果用列表list,那么调取excel表格中的姓名时会形成一个一个小列表,但是关键字搜索的时候对象得是字符串格式的,不然搜索会失败。至于为什么这样,我也不太懂,总之是试出来的。

  • 当然如果你不愿意再重新设立一个元组,可以直接调用单元格内容*sh.cell_value(i,0)*进行筛选,当然前提也得是先定义
    *sh = wb.sheet_by_name("Sheet1")*看下面👇👇:
for i in range(nrows):
        key = sh.cell_value(i,0)
        if not os.path.exists(to_dir_path):
                print("to_dir_path not exist,so create the dir")
                os.mkdir(to_dir_path, 1)
        if os.path.exists(src_dir_path):
                print("src_dir_path exitst")
                for file in os.listdir(src_dir_path):
                        # is file
                        if os.path.isfile(src_dir_path + '/' + file):
                                if key in file:
                                        print('找到包含"' + key + '"字符的文件,绝对路径为----->' + src_dir_path + '/' + file)
                                        print('复制到----->' + to_dir_path + file)
                                        shutil.copy(src_dir_path + '/' + file, to_dir_path + '/' + file)

就这样,我们就在一大堆文件中,把带有我们班名单的孩子们给“揪”出来,放在指定文件夹下啦!
pycharm运行结果如下:
pycharm输出
(为了保护我方娃娃的隐私,真是费老劲了,自己的美照都不带修修滴!😌😌)

  • 每成功搜索到关键字,就会 print("src_dir_path exits"),然后将具体文件的地址显示出来,并且复制到指定的目标文件夹下。
  • 最后,我其实已经好多天没在线上学习了,真不是我懒(也没看电视剧),就是很忙很忙。暑假一定恶补我的作业的!立下军令状🚩🚩。
展开阅读全文
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值