sand.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import os
  2. import pandas as pd
  3. import warnings
  4. from tqdm import tqdm # 用于显示进度条
  5. # 忽略openpyxl的默认样式警告
  6. warnings.filterwarnings("ignore", message="Workbook contains no default style, apply openpyxl's default")
  7. def check_xlsx_files(path):
  8. """
  9. 遍历指定路径下的所有 .xlsx 文件,并检查 '交易金额' 列是否为数字类型。
  10. Args:
  11. path (str): 要遍历的目录路径
  12. """
  13. # 获取目录下所有 .xlsx 文件
  14. xlsx_files = [f for f in os.listdir(path) if f.endswith('.xlsx')]
  15. # 如果没有找到 .xlsx 文件,直接返回
  16. if not xlsx_files:
  17. print("未找到任何 .xlsx 文件")
  18. return
  19. # 初始化进度条
  20. pbar = tqdm(total=len(xlsx_files), desc="处理文件", unit="file")
  21. problem_files = [] # 记录有问题的文件
  22. for file in xlsx_files:
  23. file_path = os.path.join(path, file)
  24. try:
  25. # 尝试读取 Excel 文件
  26. df = pd.read_excel(file_path)
  27. # 检查 '交易金额' 列是否存在
  28. if '交易金额' not in df.columns:
  29. print(f"警告:文件 {file} 中没有 '交易金额' 列")
  30. pbar.update(1)
  31. continue
  32. # 检查 '交易金额' 列是否为数字类型
  33. if not pd.api.types.is_numeric_dtype(df['交易金额']):
  34. problem_files.append(file)
  35. print(f"问题文件:{file} 中的 '交易金额' 列不是数字类型")
  36. pbar.update(1)
  37. except Exception as e:
  38. # 如果读取文件失败,记录错误信息
  39. print(f"错误:无法处理文件 {file}")
  40. print(f"原因:{str(e)}")
  41. pbar.update(1)
  42. pbar.close() # 关闭进度条
  43. if problem_files:
  44. print("\n以下文件存在问题:")
  45. for file in problem_files:
  46. print(file)
  47. else:
  48. print("\n所有文件的 '交易金额' 列都是数字类型")
  49. # 如果直接运行脚本,可以通过命令行传入路径
  50. if __name__ == "__main__":
  51. import sys
  52. if len(sys.argv) < 2:
  53. print("请提供要检查的目录路径!")
  54. print(f"用法:python {sys.argv[0]} /path/to/directory")
  55. sys.exit(1)
  56. path = sys.argv[1]
  57. check_xlsx_files(path)