qq_40700404 2024-03-04 17:21 采纳率: 100%
浏览 11
已结题

python导出文件报错

问题:PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。: 'C:\Users\V_SHBZ~1\AppData\Local\Temp\openpyxl.ebehm0o5'

背景:用python导出文件的时候报错了,前面的代码都可以正常运行,但是导出的时候就报错了,
这个是导出文件代码:GDT_MP_jiesuan.to_excel(r"C:\Users\Desktop\jiesuanzu.xlsx",index=False),
还有一个比较神奇的事情是我导出其中一部分数据20w+行按照上面的代码可以导出来,但是导出60w+行就报错了,代码都没有变,各位帮忙看下呢

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-04 17:23
    关注

    引自免费微信小程序:皆我百晓生

    该问题表明在尝试使用 pandas 库的 to_excel 方法将数据写入Excel文件时,由于另一个程序或进程正在占用该文件而导致了权限错误。特别是在Windows环境下,错误代码32(WinError 32)通常表示“文件正被其他进程使用”。

    根据您提供的信息,当尝试导出较大数量(60w+行)的数据时出现问题,而在较小数据量(20w+行)时却可以成功,这可能与内存使用、处理时间以及Excel文件格式的限制有关。

    解决此问题可尝试以下几种方法:

    1. 确保没有其他程序打开并锁定该文件

      • 在执行导出操作之前,请检查目标文件是否已被其他应用程序(如Excel或其他脚本)打开。
    2. 分块写入数据: 当一次性写入大量数据时,可能会超过Excel文件格式的限制或者内存限制,导致无法正常写入。您可以尝试将数据分块写入不同的工作表或者不同的文件中:

      # 假设chunksize为每块10万行
      chunksize = 100000
      for i in range(0, len(GDT_MP_jiesuan), chunksize):
          df_chunk = GDT_MP_jiesuan.iloc[i:i + chunksize]
          df_chunk.to_excel(f"C:\\Users\\Desktop\\jiesuanzu_{i//chunksize}.xlsx", index=False)
      
    3. 设置文件模式为追加或独占创建: 尽管Excel文件不直接支持追加模式,但您可以在每次写入前先删除目标文件来模拟类似行为。

      import os
      if os.path.exists(r"C:\Users\Desktop\jiesuanzu.xlsx"):
          os.remove(r"C:\Users\Desktop\jiesuanzu.xlsx")
      GDT_MP_jiesuan.to_excel(r"C:\Users\Desktop\jiesuanzu.xlsx", index=False)
      
    4. 使用其他库替代openpyxl: 考虑到大数据量和性能,可以尝试使用诸如 xlsxwriterpandas.ExcelWriter 并设置 if_sheet_exists='replace' 参数以替换原有文件内容,而不是追加。

      import pandas as pd
      writer = pd.ExcelWriter(r"C:\Users\Desktop\jiesuanzu.xlsx", engine='xlsxwriter', mode='w')
      GDT_MP_jiesuan.to_excel(writer, index=False)
      writer.save()
      
    5. 考虑其他数据存储格式: 对于非常大的数据集,建议使用更适用于大数据处理的格式,例如CSV或数据库,而非Excel。

    请根据实际情况选择合适的方法尝试解决问题,并确保在操作文件系统时注意安全性和备份现有文件。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月16日
  • 已采纳回答 3月8日
  • 创建了问题 3月4日