zoukankan      html  css  js  c++  java
  • python——根据电子表格的数据自动查找文件

    最近刚接触python,找点小任务来练练手,希望自己在实践中不断的锻炼自己解决问题的能力。

    经理最近又布置了一个很繁琐的任务给我:有一项很重大的项目做完了,但是要过审计(反正就是类似的审批之类的事情),要提交整个项目的过程性文件。这个项目做了整整有一年,其中的开了无数次会议,定了无数次方案,所以也形成了大大小小的很多个文件(图纸,电子表格,word文档,图像)。现在的任务就是要从一个很大文件夹中找出审计要的指定的300个文件。

    这件事有手干也很简单,就是复制电子表格中的文件名,然后到搜索栏中去搜索它,找到它。十来个文件找找还好,300多个手动干就太反锁了,不是吗?

    解决思路:

    1. 通过python去读取电子表格中的300个文件名并清除空格
    2. 将每个文件名作为参数传给windows的批处理文件(.bat),让它去查找文件是否存在,并将结果返回
    3. python 接到结果打印出来
    4. 通过结果,再次手工确认程序识别出来的是否真的找不到,是否只是名字稍有差别。

    python脚本:

     1 import openpyxl
     2 import os
     3 #获得excel文件
     4 wb = openpyxl.load_workbook('d:/201704.xlsx')
     5 #获取列值
     6 def get_delivery(wb):
     7     #获取表单名称
     8     sheet_names = wb.get_sheet_names()
     9     #获取表
    10     sheet=wb.get_sheet_by_name(sheet_names[0])
    11     #获取列值,除了第一行的标题
    12     deliveries = [cellobj.value for cellobj in sheet['C'] if cellobj.value != None]
    13     return deliveries
    14 
    15 my_deliverys = get_delivery(wb)
    16 nofound = []
    17 # print(my_delivery)
    18 for delivery in my_deliverys:
    19     if os.system('search.bat %s' % delivery) == 1:
    20         nofound.append(delivery)
    21 
    22 for x in nofound:
    23     if x != '交付物列表:':
    24         print("没有找到的文件:%s" %x)
    25 print("程序结束")

    search.bat 代码:

     1 @echo off
     2 
     3 set "FileName=%1"
     4 set "FilePath=D:"
     5 echo 正在搜索文件...
     6 
     7 for /f "delims=" %%b in ('dir /a-d /s /b "%FilePath%*%FileName%" 2^>nul') do (
     8   if /i "%%~nxb" equ "%FileName%" (
     9     echo,%%b
    10   )
    11 )

    啊~~一下子心情就好了,又可以从繁杂的工作里逃出来晒太阳喝喝茶了。。。

    作者:最后一个亮亮 出处: https://www.cnblogs.com/swim/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得还有帮助的话,可以点一下右下角的【推荐】
  • 相关阅读:
    RDMA技术详解(二):RDMA Send Receive操作
    RDMA技术详解(一):RDMA概述
    Fedora中制作UEFI/BIOS启动的U盘安装盘
    Fedora中制作BIOS启动的U盘安装盘
    chkdsk /f
    单片机原理及应用---实验计划
    LeetCode 645. Set Mismatch(错误的集合)
    LeetCode 401. Binary Watch(二进制手表)
    LeetCode 852. Peak Index in a Mountain Array(山脉数组的峰顶索引)
    LeetCode 518. Coin Change 2(零钱兑换 II)
  • 原文地址:https://www.cnblogs.com/swim/p/7018907.html
Copyright © 2011-2022 走看看