一家公司有一个不断壮大的测试数据库,其中包含大量用于不同项目的子文件夹,这些子文件夹中包含各种各样的文件,包括.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()