引自免费微信小程序:皆我百晓生
该问题表明在尝试使用 pandas 库的 to_excel 方法将数据写入Excel文件时,由于另一个程序或进程正在占用该文件而导致了权限错误。特别是在Windows环境下,错误代码32(WinError 32)通常表示“文件正被其他进程使用”。
根据您提供的信息,当尝试导出较大数量(60w+行)的数据时出现问题,而在较小数据量(20w+行)时却可以成功,这可能与内存使用、处理时间以及Excel文件格式的限制有关。
解决此问题可尝试以下几种方法:
-
确保没有其他程序打开并锁定该文件:
- 在执行导出操作之前,请检查目标文件是否已被其他应用程序(如Excel或其他脚本)打开。
-
分块写入数据:
当一次性写入大量数据时,可能会超过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)
-
设置文件模式为追加或独占创建:
尽管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)
-
使用其他库替代openpyxl:
考虑到大数据量和性能,可以尝试使用诸如 xlsxwriter 或 pandas.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()
-
考虑其他数据存储格式:
对于非常大的数据集,建议使用更适用于大数据处理的格式,例如CSV或数据库,而非Excel。
请根据实际情况选择合适的方法尝试解决问题,并确保在操作文件系统时注意安全性和备份现有文件。