""" xlsx转csv工具 - 将指定目录下所有.xlsx文件转换为.csv格式 - 输出路径:D:\15CVS - 只处理每个xlsx文件的第一个工作表(主数据表) - 忽略以~$开头的临时文件 - CSV编码:UTF-8 with BOM - 避免覆盖同名文件(如已存在则跳过并提示) """ import os import sys import csv import glob from openpyxl import load_workbook def xlsx_to_csv(src_dir, out_dir): """将源目录下所有xlsx文件转换为csv格式""" # 确保输出目录存在 os.makedirs(out_dir, exist_ok=True) # 统计计数 success_count = 0 skip_count = 0 fail_count = 0 # 遍历源目录下所有xlsx文件(不递归子目录) xlsx_files = glob.glob(os.path.join(src_dir, "*.xlsx")) for xlsx_path in xlsx_files: filename = os.path.basename(xlsx_path) # 跳过以~$开头的临时文件 if filename.startswith("~$"): print(f"[跳过] 临时文件: {filename}") skip_count += 1 continue csv_filename = os.path.splitext(filename)[0] + ".csv" csv_path = os.path.join(out_dir, csv_filename) # 检查目标文件是否已存在 if os.path.exists(csv_path): print(f"[跳过] 文件已存在: {csv_filename}") skip_count += 1 continue try: print(f"[转换] {filename} -> {csv_filename}", end=" ... ") # 读取xlsx文件(只读模式,提高性能) wb = load_workbook(xlsx_path, read_only=True, data_only=True) ws = wb.active # 获取第一个工作表 # 写入CSV文件 with open(csv_path, "w", newline="", encoding="utf-8-sig") as f: writer = csv.writer(f) for row in ws.iter_rows(values_only=True): # 将None转为空字符串,其他值保持原样 csv_row = [cell if cell is not None else "" for cell in row] writer.writerow(csv_row) wb.close() print("成功") success_count += 1 except Exception as e: print(f"失败") print(f" [错误] {filename}: {e}") fail_count += 1 # 清理可能生成的不完整文件 if os.path.exists(csv_path): try: os.remove(csv_path) except Exception: pass # 打印统计结果 print("\n" + "=" * 50) print(f"转换完成!") print(f" 成功: {success_count} 个") print(f" 跳过: {skip_count} 个") print(f" 失败: {fail_count} 个") print(f" 总计: {success_count + skip_count + fail_count} 个") print("=" * 50) if __name__ == "__main__": src_dir = r"d:\A工作\P-L15_config" out_dir = r"D:\15CVS" # 支持命令行参数修改源目录 if len(sys.argv) > 1: src_dir = sys.argv[1] if len(sys.argv) > 2: out_dir = sys.argv[2] print(f"源目录: {src_dir}") print(f"输出目录: {out_dir}") print("-" * 50) xlsx_to_csv(src_dir, out_dir)