使用python批量查询excel表中的特定行数据

循环遍历excel表1中的每一行数据,把数据存储在列表中,将该数据作为key,在另一个excel表中查询带有key的特定行,并将该行输出到新表2中,表1 和表2 的格式相同。

import os

import xlsxwriter as xlsxwriter
import xlwt
import xlrd



##遍历函数
def files(dirpath, suffix=['.xls', 'xlsx']):
    for root, dirs, files in os.walk(dirpath):
        for name in files:
            if name.split('.')[-1] in suffix:
                yield os.path.join(root, name)


#查找
def select(d,z):
    # y=0
    try:
        file_list = files(dirpath)
        for filename in file_list:
            workbook = xlrd.open_workbook(filename, encoding_override="utf-8")
            #workbook = xlrd.open_workbook(filename)  # 读取源excel文件
            print(filename)
            sheetnum = workbook.nsheets  # 获取源文件sheet数目
            for m in range(0, sheetnum):
                sheet = workbook.sheet_by_index(m)  # 读取源excel文件第m个sheet的内容
                nrowsnum = sheet.nrows  # 获取该sheet的行数
                for i in range(0, nrowsnum):
                    date = sheet.row(i)  # 获取该sheet第i行的内容
                    for n in range(0, len(date)):
                        aaa = str(date[n].value)  # 把该行第n个单元格转化为字符串,目的是下一步的关键字比对
                        # print("===========aaa",aaa)

                        # 以下两行达到多个关键词提取目的
                        #
                        # for k in range(0, len(d)):
                        #     keyword = str(d[k])
                        #     print(keyword)
                        # if aaa.find(d) > 0:  # 进行关键字比对,包含关键字返回1,否则返回0
                        if aaa == d:
                            # y = y + 1
                            print("================哈哈  找到了")
                            for j in range(len(date)):
                                wsheet.write(z, j+1, sheet.cell_value(i, j))  # 该行包含关键字,则把它所有单元格依次写入入新生成的excel的第y行
                            wsheet.write(z, len(date)+1, '本校教师')    # print(wsheet.write)


                        else:
                            wsheet.write(z, 0, d)  # 该行包含关键字,则把它所有单元格依次写d


    except Exception as e:
        print(e)

if __name__ == '__main__':
    y = 0  # 生成的excel的行计数
    d = []
    #教师表
    dirpath = r'E:\python\rename_tools\date\4\jiaoShi'
    jieguo = xlsxwriter.Workbook("jieguo.xlsx")  # 生成excel
    wsheet = jieguo.add_worksheet('sheet name')  # 生成sheet
    #第一作者
    wb=xlrd.open_workbook(r'E:\python\rename_tools\date\1\ssciTxun.xlsx')
    sheet_num=wb.nsheets  #获取excel里面的sheet的数量
    sheet_names=wb.sheet_names()   #获取到Excel里面所有的sheet的名称列表,即使没有sheet也能用。
    sheet=wb.sheet_by_index(0)   #通过索引的方式获取到某一个sheet,现在是获取的第一个sheet页,也可以通过sheet的名称进行获取,sheet_by_name('sheet名称')
    rows=sheet.nrows   #获取sheet页的行数,一共有几行
    print(rows)
    columns=sheet.ncols   #获取sheet页的列数,一共有几列
    #获取第一行的数据
    #row_data=sheet.row_values(1)  #返回给定的行数的单元格数据进行切片,
    one_data = sheet.cell(0, 0)
    for i in range(1,rows):
        one_data = sheet.cell(i, 0)
        d.append(one_data.value)

    print(d)

    for z in range(len(d)):

        select(d[z], z)
        print(d[z])
        print("========z", z)
    jieguo.close()

你可能感兴趣的:(excel,python,开发语言)