鱼C论坛

 找回密码
 立即注册
查看: 1464|回复: 10

请问有老师写过xls表间平衡的python吗?

[复制链接]
发表于 2024-2-4 17:12:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问有老师写过xls表间平衡验证的python程序吗?


回复请注意python格式~~

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-2-4 17:13:15 | 显示全部楼层
当然有啦!我可以帮你写一个简单的Python程序来验证xls表间的平衡性。不过在开始之前,我们需要安装一个Python库来处理Excel文件。你可以使用`xlrd`库来读取Excel文件的数据。如果你还没有安装这个库,可以在命令行中运行以下命令进行安装:

  1. pip install xlrd
复制代码


接下来,我们可以编写以下代码来验证xls表间的平衡性:

  1. import xlrd

  2. def check_balance(excel_file):
  3.     # 打开Excel文件
  4.     xls = xlrd.open_workbook(excel_file)
  5.    
  6.     # 获取所有表格的名称
  7.     sheets = xls.sheet_names()
  8.    
  9.     # 遍历每个表格
  10.     for sheet_name in sheets:
  11.         # 读取表格数据
  12.         sheet = xls.sheet_by_name(sheet_name)
  13.         
  14.         # 获取表格的总行数和总列数
  15.         num_rows = sheet.nrows
  16.         num_cols = sheet.ncols
  17.         
  18.         # 计算每列的总和
  19.         col_sums = [0] * num_cols
  20.         for row in range(num_rows):
  21.             for col in range(num_cols):
  22.                 cell_value = sheet.cell_value(row, col)
  23.                 col_sums[col] += cell_value
  24.         
  25.         # 判断每列的总和是否为0
  26.         for col_sum in col_sums:
  27.             if col_sum != 0:
  28.                 return False
  29.    
  30.     # 所有表格的列总和都为0,返回True
  31.     return True

  32. # 使用示例
  33. excel_file = 'your_excel_file.xls'
  34. result = check_balance(excel_file)
  35. if result:
  36.     print("xls表间平衡")
  37. else:
  38.     print("xls表间不平衡")
复制代码


在上面的代码中,我们首先打开Excel文件,然后遍历每个表格。对于每个表格,我们计算每一列的总和,如果某一列的总和不为0,则说明xls表间不平衡。

希望这个程序能帮到你!如果有任何问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-4 17:45:04 | 显示全部楼层
FishC 发表于 2024-2-4 17:13
当然有啦!我可以帮你写一个简单的Python程序来验证xls表间的平衡性。不过在开始之前,我们需要安装一个Pyt ...

表间平衡没这么 简单的........
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-4 17:45:24 | 显示全部楼层
清風 发表于 2024-02-04 17:45
表间平衡没这么 简单的........


噢,抱歉给你带来了困惑。如果你要验证的是表间的平衡性,即多个表格之间的数据总和是否相等,确实比较复杂一些。

让我们重新思考一下问题。假设我们有多个Excel表格,我们要判断这些表格之间的数据总和是否相等,可以按照以下步骤进行:

首先,我们需要安装两个库:`xlrd`用于读取Excel文件,`numpy`用于处理数组计算。使用以下pip命令进行安装:

  1. pip install xlrd numpy
复制代码


接下来,我们可以编写以下代码来检查表间的平衡性:

  1. import xlrd
  2. import numpy as np

  3. def check_balance(file_paths):
  4.     # 存储各个表格的总和
  5.     sum_list = []

  6.     for file_path in file_paths:
  7.         # 打开Excel文件
  8.         xls = xlrd.open_workbook(file_path)

  9.         # 获取所有表格的名称
  10.         sheets = xls.sheet_names()

  11.         # 遍历每个表格
  12.         for sheet_name in sheets:
  13.             # 读取表格数据
  14.             sheet = xls.sheet_by_name(sheet_name)

  15.             # 将表格数据转为二维数组
  16.             data = []
  17.             for row in range(sheet.nrows):
  18.                 data.append(sheet.row_values(row))

  19.             # 计算表格的总和
  20.             total_sum = np.sum(data)

  21.             # 将表格的总和添加到列表中
  22.             sum_list.append(total_sum)

  23.     # 判断总和是否相等
  24.     if len(set(sum_list)) == 1:
  25.         return True
  26.     else:
  27.         return False

  28. # 使用示例
  29. file_paths = ['file1.xls', 'file2.xls', 'file3.xls']
  30. result = check_balance(file_paths)

  31. if result:
  32.     print("表间平衡")
  33. else:
  34.     print("表间不平衡")
复制代码


在上面的代码中,我们遍历每个Excel文件和表格,将表格数据存储在二维数组中,并计算每个表格的总和。然后,将每个表格的总和存储在一个列表中,最后检查列表中的元素是否都相等。

希望这次能满足你的需求,如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-4 17:52:38 | 显示全部楼层
FishC 发表于 2024-2-4 17:45
噢,抱歉给你带来了困惑。如果你要验证的是表间的平衡性,即多个表格之间的数据总和是否相等,确实比较 ...

现在需求是:M个xls文件(其中各有N个sheet):
需要询问用户录入哪几个sheet间的哪几行相加和哪几行相加平衡? 哪几列相加 和哪几列相加平衡?
甚至是A sheet的哪几列和Bsheet的哪几行相加相等........
总之很复杂的样子,我都设想不出来..........
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-4 17:52:59 | 显示全部楼层
清風 发表于 2024-02-04 17:52
现在需求是:M个xls文件(其中各有N个sheet):
需要 ...


嗯,这个需求确实比较复杂,需要用户指定不同表格和表格内的行列来进行求和和平衡的计算。下面是一个示例代码,用于实现这个复杂的要求:

  1. import xlrd

  2. def get_user_input():
  3.     # 获取用户输入的文件路径和表格索引
  4.     file_paths = []
  5.     sheet_indices = []
  6.     while True:
  7.         file_path = input("请输入一个xls文件的路径(输入'q'结束):")
  8.         if file_path == 'q':
  9.             break
  10.         else:
  11.             file_paths.append(file_path)
  12.             sheet_index = int(input("请输入要处理的表格在文件中的索引:"))
  13.             sheet_indices.append(sheet_index)
  14.     return file_paths, sheet_indices

  15. def get_sum(user_input, sheet):
  16.     # 提取用户输入的行号或列号,并计算总和
  17.     result = 0
  18.     for item in user_input:
  19.         if item.startswith('r'):
  20.             row = int(item[1:])
  21.             row_data = sheet.row_values(row)
  22.             result += sum(row_data)
  23.         elif item.startswith('c'):
  24.             col = int(item[1:])
  25.             col_data = sheet.col_values(col)
  26.             result += sum(col_data)
  27.     return result

  28. def check_balance(file_paths, sheet_indices):
  29.     # 存储各个表格的求和结果
  30.     sums = []
  31.     for i, file_path in enumerate(file_paths):
  32.         xls = xlrd.open_workbook(file_path)
  33.         sheet = xls.sheet_by_index(sheet_indices[i])
  34.         user_input = input(f"请输入要求和的行列(以空格分隔),使用'r'表示行,'c'表示列:").split()
  35.         total_sum = get_sum(user_input, sheet)
  36.         sums.append(total_sum)
  37.     if len(set(sums)) == 1:
  38.         return True
  39.     else:
  40.         return False

  41. # 主函数
  42. def main():
  43.     file_paths, sheet_indices = get_user_input()
  44.     result = check_balance(file_paths, sheet_indices)
  45.     if result:
  46.         print("表间平衡")
  47.     else:
  48.         print("表间不平衡")

  49. main()
复制代码


上述代码中,`get_user_input` 函数用于获取用户输入的文件路径和表格索引。`get_sum` 函数用于提取用户输入的行号或列号,并计算总和。`check_balance` 函数根据用户输入的行列信息,计算出每个指定表格的总和,并判断是否平衡。主函数 `main` 调用其他函数来实现整个流程。

在程序运行时,首先会要求用户依次输入 xls 文件的路径和要处理的表格索引,然后依次输入要求和的行列(以空格分隔),最后程序会判断表间是否平衡输出结果。

希望这个示例代码能满足你的需求!如果有任何问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-4 17:53:46 | 显示全部楼层
什么叫 表间平衡验证
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-2-4 18:07:45 | 显示全部楼层
人造人 发表于 2024-2-4 17:53
什么叫 表间平衡验证

就是几个表之间的数据相加对比
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-4 18:16:50 | 显示全部楼层
帮你问了:

当然有啦!我可以帮你写一个简单的Python程序来验证xls表间的平衡性。不过在开始之前,我们需要安装一个Python库来处理Excel文件。你可以使用xlrd库来读取Excel文件的数据。如果你还没有安装这个库,可以在命令行中运行以下命令进行安装:
  1. pip install xlrd
复制代码

AI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.
接下来,我们可以编写以下代码来验证xls表间的平衡性:
  1. import xlrd

  2. def check_balance(excel_file):
  3.     # 打开Excel文件
  4.     xls = xlrd.open_workbook(excel_file)
  5.     # 获取所有表格的名称
  6.     sheets = xls.sheet_names()
  7.    
  8.     # 遍历每个表格
  9.     for sheet_name in sheets:
  10.         # 读取表格数据
  11.         sheet = xls.sheet_by_name(sheet_name)
  12.         # 获取表格的总行数和总列数
  13.         num_rows = sheet.nrows
  14.         num_cols = sheet.ncols
  15.         
  16.         # 计算每列的总和
  17.         col_sums = [0] * num_cols
  18.         for row in range(num_rows):
  19.             for col in range(num_cols):
  20.                 cell_value = sheet.cell_value(row, col)
  21.                 col_sums[col] += cell_value
  22.         
  23.         # 判断每列的总和是否为0
  24.         for col_sum in col_sums:
  25.             if col_sum != 0:
  26.                 return False
  27.    
  28.     # 所有表格的列总和都为0,返回True
  29.     return True

  30. # 使用示例
  31. excel_file = 'your_excel_file.xls'
  32. result = check_balance(excel_file)
  33. if result:
  34.     print("xls表间平衡")
  35. else:
  36.     print("xls表间不平衡")
复制代码

AI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.
在上面的代码中,我们首先打开Excel文件,然后遍历每个表格。对于每个表格,我们计算每一列的总和,如果某一列的总和不为0,则说明xls表间不平衡。希望这个程序能帮到你!

给个最佳答案呗!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-4 18:17:52 | 显示全部楼层
清風 发表于 2024-2-4 18:07
就是几个表之间的数据相加对比

详细一点,非常详细的描述一下你的需求
如果代码量不是太大的话,我们就帮你写了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-2-4 20:34:47 | 显示全部楼层
解决方案(未经测试)


AI生成代码

这个脚本现在能处理用户输入,但格式必须遵循约定(例如使用'r'前缀来指定行操作,使用'c'前缀来指定列操作),并且指示列时使用Excel中的列名(例如"A", "B", "C"等)。

在实际使用中,你可能需要根据Excel文件的实际情况进一步调整代码,以支持不同的列名或其他特定格式。同样,错误处理仍然是简化版;
在生产环境中,你需要确保你的代码能处理不同类型的错误,异常情况以及提供友好的用户反馈。


  1. import pandas as pd

  2. def parse_user_input(user_input):
  3.     # 假设用户输入格式 'filename.xls:Sheet1:r1,2,3+4,5;cA,B+D,E'
  4.     instructions = []
  5.     items = user_input.split(';')
  6.     for item in items:
  7.         parts = item.split(':', 2)
  8.         if len(parts) < 3:
  9.             print("Invalid input format.")
  10.             return None
  11.         filename, sheet, indices = parts
  12.         if indices.startswith('r'):  # Row input
  13.             rows = [list(map(int, r.split(','))) for r in indices[1:].split('+')]
  14.             instructions.append({'file': filename, 'sheet': sheet, 'rows': rows})
  15.         elif indices.startswith('c'):  # Column input
  16.             cols = [c.split(',') for c in indices[1:].split('+')]
  17.             instructions.append({'file': filename, 'sheet': sheet, 'cols': cols})
  18.     return instructions

  19. def calculate_and_compare(df, rows=None, cols=None):
  20.     if rows:
  21.         row_indices = [r-1 for r in rows]  # Convert to 0-based index
  22.         sum1 = df.iloc[row_indices].sum().sum()
  23.         return sum1
  24.     elif cols:  # Column input
  25.         sums = [df[col].sum() for col in cols]  # Sum each specified column
  26.         return sums

  27. def execute_instructions(instructions):
  28.     for instr in instructions:
  29.         df = pd.read_excel(instr['file'], sheet_name=instr['sheet'])
  30.         # 执行行的计算并比较结果
  31.         if 'rows' in instr:
  32.             for i in range(len(instr['rows'])):
  33.                 result = calculate_and_compare(df, rows=instr['rows'][i])
  34.                 print(f"File: {instr['file']}, Sheet: {instr['sheet']}, Rows: {instr['rows'][i]}, Sum: {result}")
  35.         # 执行列的计算并比较结果
  36.         if 'cols' in instr:
  37.             for i in range(len(instr['cols'])):
  38.                 result = calculate_and_compare(df, cols=instr['cols'][i])
  39.                 print(f"File: {instr['file']}, Sheet: {instr['sheet']}, Columns: {instr['cols'][i]}, Sums: {result}")

  40. def main():
  41.     user_input = input("Please input the instructions:(example: 'filename.xls:Sheet1:r1,2,3+4,5;cA,B+D,E')\n")
  42.     instructions = parse_user_input(user_input)
  43.     if instructions is None:
  44.         return
  45.     # 执行指令
  46.     execute_instructions(instructions)

  47. if __name__ == "__main__":
  48.     main()
复制代码


求最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 10:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表