|
当然可以!我们可以让用户在程序开始时输入要排除的行号和列号。以下是修改后的代码:
- import os
- import pandas as pd
- import re
- def get_user_input():
- print("请输入要排除的行号(用逗号分隔,例如:1,2,3,4,5):")
- skip_rows_input = input().strip()
- skip_rows = [int(x.strip()) - 1 for x in skip_rows_input.split(',') if x.strip()]
-
- print("请输入要排除的列号(用逗号分隔,例如:A,B,C):")
- skip_cols_input = input().strip()
- skip_cols = []
-
- for col in skip_cols_input.split(','):
- col = col.strip().upper()
- if col:
- # 将列字母转换为数字索引(A=0, B=1, ...)
- col_idx = 0
- for i, char in enumerate(col[::-1]):
- col_idx += (ord(char) - 64) * (26 ** i)
- skip_cols.append(col_idx - 1)
-
- return skip_rows, skip_cols
- def process_excel_file(file_path, skip_rows, skip_cols):
- # 读取Excel文件
- df = pd.read_excel(file_path, header=None)
-
- # 排除指定的行
- if skip_rows:
- df = df.drop(skip_rows)
-
- # 排除指定的列
- if skip_cols:
- df = df.drop(columns=skip_cols)
-
- # 重置索引
- df.reset_index(drop=True, inplace=True)
-
- # 将第一行作为表头
- df.columns = df.iloc[0]
- df = df[1:]
- df.reset_index(drop=True, inplace=True)
-
- return df
- def merge_excel_files_from_folders(root_folder, skip_rows, skip_cols):
- all_data = pd.DataFrame()
-
- for foldername, subfolders, filenames in os.walk(root_folder):
- for filename in filenames:
- if filename.endswith('.xlsx') or filename.endswith('.xls'):
- file_path = os.path.join(foldername, filename)
-
- # 处理单个文件
- df = process_excel_file(file_path, skip_rows, skip_cols)
-
- # 合并数据
- all_data = pd.concat([all_data, df], ignore_index=True)
-
- return all_data
- def save_merged_data_to_excel(data, output_file):
- data.to_excel(output_file, index=False)
- if __name__ == "__main__":
- # 获取用户输入
- skip_rows, skip_cols = get_user_input()
-
- # 根文件夹路径
- root_folder = "E:/ai/shiyan"
-
- # 输出文件路径
- output_file = "E:/ai/shiyan/merged_data.xlsx"
-
- # 合并数据
- merged_data = merge_excel_files_from_folders(root_folder, skip_rows, skip_cols)
-
- # 保存合并后的数据
- save_merged_data_to_excel(merged_data, output_file)
-
- print(f"数据已成功合并并保存到 {output_file}")
复制代码
这个修改后的代码具有以下特点:
1. 添加了 get_user_input() 函数,用于获取用户输入的要排除的行号和列号
2. 行号从1开始计数(符合Excel的习惯),程序内部会自动转换为从0开始的索引
3. 列号支持字母表示(A, B, C等),程序会自动转换为数字索引
4. 处理Excel文件时会跳过指定的行和列
5. 将处理后的数据的第一行作为表头
使用示例:
- 当程序提示输入行号时,输入:1,2,3,4,5
- 当程序提示输入列号时,输入:A,B,C
这样程序就会排除第1-5行和A、B、C列,然后将剩余数据的第一行作为表头进行合并。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|