import os import pandas as pd import warnings from tqdm import tqdm # 用于显示进度条 # 忽略openpyxl的默认样式警告 warnings.filterwarnings("ignore", message="Workbook contains no default style, apply openpyxl's default") def check_xlsx_files(path): """ 遍历指定路径下的所有 .xlsx 文件,并检查 '交易金额' 列是否为数字类型。 Args: path (str): 要遍历的目录路径 """ # 获取目录下所有 .xlsx 文件 xlsx_files = [f for f in os.listdir(path) if f.endswith('.xlsx')] # 如果没有找到 .xlsx 文件,直接返回 if not xlsx_files: print("未找到任何 .xlsx 文件") return # 初始化进度条 pbar = tqdm(total=len(xlsx_files), desc="处理文件", unit="file") problem_files = [] # 记录有问题的文件 for file in xlsx_files: file_path = os.path.join(path, file) try: # 尝试读取 Excel 文件 df = pd.read_excel(file_path) # 检查 '交易金额' 列是否存在 if '交易金额' not in df.columns: print(f"警告:文件 {file} 中没有 '交易金额' 列") pbar.update(1) continue # 检查 '交易金额' 列是否为数字类型 if not pd.api.types.is_numeric_dtype(df['交易金额']): problem_files.append(file) print(f"问题文件:{file} 中的 '交易金额' 列不是数字类型") pbar.update(1) except Exception as e: # 如果读取文件失败,记录错误信息 print(f"错误:无法处理文件 {file}") print(f"原因:{str(e)}") pbar.update(1) pbar.close() # 关闭进度条 if problem_files: print("\n以下文件存在问题:") for file in problem_files: print(file) else: print("\n所有文件的 '交易金额' 列都是数字类型") # 如果直接运行脚本,可以通过命令行传入路径 if __name__ == "__main__": import sys if len(sys.argv) < 2: print("请提供要检查的目录路径!") print(f"用法:python {sys.argv[0]} /path/to/directory") sys.exit(1) path = sys.argv[1] check_xlsx_files(path)