为了让女朋友赶快成为办公室里的老司机,我只好趁着中午吃饭的时候用python研究了。。

女朋友上午给我说,昨天本来打算准时下班,结果因为在办公室查询和处理数据速度太慢,一天才完成了几个表格,要是搞不定的话,今天还要加班。
办公室里的老司机们处理起来比较熟练,双屏、三屏电脑或者用函数什么的处理的挺快的。
之前倒是教女朋友用过vlookup函数来查询,但是她感觉太复杂了,只好用python帮她减轻点工作压力吧。

女朋友工作任务主要是查询配件的价格。


每个配件大概有10-15个供应商,每个供应商在每个报价周期中价格是不一定相同的,比方说九月报价100元,十月报价110元等,并且有的供应商在一个表格中有不同的工作簿,查找起来很麻烦,用vlookup函数不是很方便。


现在的操作方法基本上是,记住《配件清单》里面的配件名字,复制一下,然后打开各个供应商的《报价表》,在报价表里找到这个配件名字,然后把各个报价周期中的价格给找到,重新建立一个表格,把这些信息给复制进去就可以了。


老司机一般就用双屏来同时查找,速度会相对快一点,但是这个速度在自动查询上还是渣渣。

中午吃饭的时候大致想了一下,程序操作逻辑:
1.读取文件获得所有“配件名字”;
2.批量读取供应商《报价表》
3.在各个供应商《报价表》中依次搜索“配件名字”,搜索各个报价表中的工作簿的所有信息;
4.根据“配件名字”确定所在的行;
5.根据“配件名字”所在行,读取该行所有信息,即各周期报价
6.将读取到的各个周期报价给进行保存,保存所在位置及文件。

 

代码如下:

import pandas as pd
import os
import easygui as g
import xlrd
 
 
 
 
 
path = g.fileopenbox(msg="选择文件", title="选择要查询的文件清单", default='*', filetypes=None)
data = xlrd.open_workbook(path, encoding_override='utf-8')    #打开文件(文件路径)
table = data.sheets()[0]  # 选定表    #第一个工作簿
nrows = table.nrows  # 获取行号
ncols = table.ncols  # 获取列号
names = []   #空列表存储
for i in range(1, nrows):  # 第0行为表头
    alldata = table.row_values(i)  # 循环输出excel表中每一行,即所有数据
    name = alldata[0]  # 取出表中第二列数据
    names.append(name)
print('要查询的信息如下:')
print(names)
 
 
def listdir(path, path_name):  # 定义传入存储文件的list函数
    for file in os.listdir(path):    #依次获得返回指定的文件夹包含的文件或文件夹的名字的列表
        file_path = os.path.join(path, file)    #将多个路径组合后返回
        if os.path.isdir(file_path):    #返回一个列表,其中包含有指定路径下的目录和文件的名称
            listdir(file_path, path_name)
        else:
            path_name.append(file_path)       #加入到路径列表中
 
 
path_name = []
path = g.diropenbox(msg="请选择文件夹", title="选择要查询的文件夹")
listdir(path,path_name)
 
 
for path in path_name:
    file = os.path.split(path)   #拆分分隔符
    file_name = file[1]
 
 
 
    try:
        data = pd.read_excel(path,None)     #读取待查询的excel文件数据,设置None可以生成一个字典,字典中的key值即为sheet名字
        sheet_names = []    #用一个空列表, 准备存储sheet的名字
        for sh_name in data.keys():    #依次便利data.key()中的名字
            # print(sh_name)
            sheet_names.append(sh_name)    #将sheet名字存储进入列表sheet_names
        for sheet_name in sheet_names:    #依次循环获得工作簿
            workbook = pd.read_excel(path, sheet_name=sheet_name)  # 文件路径和sheet名字
            # print(workbook)
            for indexs in workbook.index:  # 用.index进行依次查找
                for i in range(len(workbook.loc[indexs].values)):  # 依次生成
                    for name in names:    #依次循环
                        if (workbook.loc[indexs].values[i] == name):    #如果查找到该关键词
                            print("*" * 50)
                            print("[" + name + "]的位置在" + path + "  的" + sheet_name + "   工作簿中")    #显示位置
                            print('行数:', indexs + 1, '列数:', i + 1)    #行数和列数,从0开始,要加1
                            print("*" * 50)
                            data = pd.DataFrame(pd.read_excel(path,sheet_name=sheet_name))  # 读取数据,设置None可以生成一个字典,字典中的key值即为sheet名字,此时不用使用DataFram,会报错
                            counts = data.loc[indexs]
                            print("[" + name + "]所在行数据如下:")
                            print(counts)  # 获取行名为0这一行的内容
                            df = pd.DataFrame(counts)
                            print(df)
                            file_save_name ='[' + name + ']-在文件[' + file_name + ']中的['+ sheet_name +']工作簿中的行数据'    #关键词所在位置
                            with open(name + '.txt', 'a+',encoding='utf-8') as f:  # 用w格式新建文件,并且用file_name命名,再加上“.txt”后缀,文字编码格式'utf-8'
                                f.write(file_save_name + '\n')  # 将文件位置写入到文本
                                f.close()  # 将文件关闭保存
                            df.to_excel(file_save_name + ".xlsx")   #写入文件
 
    except Exception as e:
        print(e)
        pass
 
print("自动查询和生成完毕")

在这里还是要推荐下我自己建的Python开发学习群:1156465813,群里都是学Python开发的,如果你正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值