Python读取并比较Excel文件中的数据

114 阅读2分钟

一家公司有一个不断壮大的测试数据库,其中包含大量用于不同项目的子文件夹,这些子文件夹中包含各种各样的文件,包括.jpeg文件以及感兴趣的.xlsx文件。想要编写一个Python程序来搜索标题中包含"test spreadsheet"字样(例如"test spreadsheet model259")的Excel文档,进而比较这些文档中的数据,并根据给定的输入值找出符合要求的文件。

2、解决方案 1)搜索和读取Excel文件 使用os.walk函数递归地遍历主文件夹中的所有子文件夹,在每个子文件夹中搜索符合指定模式的文件,并将找到的文件添加到文件列表file_list中。

2)解析Excel中的特定值 使用xlrd库读取每个Excel文件,并从中提取特定的值,例如重量、长度和速度等。

3)计算拟合模型的比例因子 对于每个文件,使用输入值计算出相应的比例因子x1,使得x1 * 文档值 = 输入值。如果存在这样的比例因子,则将文件添加到拟合模型列表中。

4)输出结果 将拟合模型列表打印到控制台,其中包含文件名称、比例因子和指向文件的链接。

代码示例:

import xlrd
import os
import fnmatch

def excelfiles(pattern):
    # 返回与给定模式匹配的文件列表
    file_list = []
    for root, dirs, files in os.walk(start_dir):
        for filename in files:
            if fnmatch.fnmatch(filename.lower(), pattern):
                if filename.endswith(".xls") or filename.endswith(".xlsx") or filename.endswith(".xlsm"):
                    file_list.append(os.path.join(root, filename))
    return file_list

def locate_vals(file_list):
    # 返回一个字典,其中包含每个文件中的特定值
    val_dict = {}
    for filename in file_list:
        wb = xlrd.open_workbook(os.path.join(start_dir, filename))
        sheet = wb.sheet_by_index(0)

        weightvalue = sheet.cell_value(1, 1)
        lenghtvalue = sheet.cell_value(1, 1)
        speedvalue = sheet.cell_value(1, 1)

        val_dict[filename] = [weightvalue, lenghtvalue, speedvalue]

    return val_dict

def scale_value(val, inputvalue):
    # 计算给定值与输入值之间的比例因子
    if inputvalue != 0:
        return val * inputvalue

def approx_Equal(x1, x2, tolerance=int(raw_input('Insert tolerance for scaling difference')),err_msg='Unacceptable tolerance', verbose = True ):
    # 判断两个值是否相等,允许一定范围的误差
    if x1 == x2:
         x = x1+ (x2-x1)/2
         return x

def main():
    # 设置搜索文件的起始目录
    start_dir = 'C:\eclipse\TST-folder'

    # 获取用户输入的搜索模式
    pattern = '*tst*'

    # 搜索符合指定模式的文件
    file_list = excelfiles(pattern)

    # 解析每个文件中特定值并存储到字典中
    val_dict = locate_vals(file_list)

    # 获取用户输入的输入值
    inputweight = int(raw_input('legg inn vekt'))
    inputlength = int(raw_input('legg inn lengd'))
    inputspeed = int(raw_input('legg inn hastighet'))

    # 计算每个文件的比例因子并存储到列表中
    fitting_models = []
    for filename, values in val_dict.items():
        weightvalue, lenghtvalue, speedvalue = values

        if inputweight != 0:
            x1 = scale_value(weightvalue, inputweight)
            if approx_Equal(x1, x2):
                fitting_models.append((filename, x1))

        elif inputlength != 0:
            x1 = scale_value(lenghtvalue, inputlength)
            if approx_Equal(x1, x2):
                fitting_models.append((filename, x1))

        elif inputspeed != 0:
            x1 = scale_value(speedvalue, inputspeed)
            if approx_Equal(x1, x2):
                fitting_models.append((filename, x1))

    # 打印拟合模型列表
    print("Fitting Models:")
    for filename, x1 in fitting_models:
        print("{}: {}".format(filename, x1))

if __name__ == "__main__":
    main()