You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环调用写文件函数触发os.remove() [WinError 32]权限错误求助

解决Windows下文件占用的PermissionError问题

核心问题分析

你遇到的PermissionError是Windows文件系统的典型问题:即便用with语句确保文件关闭,底层文件句柄可能不会被操作系统立即释放,短时间内重复删除同一文件就会触发该错误。而且你原本的os.remove操作完全多余——open(filename, "w")模式本身就会清空已有文件内容,不需要先删除。

直接修复方案

删掉os.remove相关代码,直接用"w"模式打开文件即可,修改后的函数如下:

def mass_spectra_to_mgf(filename, mass_values_list, intensity_values_list, meta_list = None, filter_by_instrument_type = None, names=None, casnos=None):
    print(os.getpid(), flush=True)

    # 去掉多余的删除操作,w模式会自动清空文件
    with open(filename, "w") as mgf_file:
        for i in range(len(mass_values_list)):
            if (meta_list):
                databaseid, intrumenttype = meta_list[i]
                if (filter_by_instrument_type and filter_by_instrument_type != intrumenttype):
                    continue
                mgf_file.write("BEGIN IONS\n")
                mgf_file.write("DATABASEID=" + databaseid + "\n")
                mgf_file.write("INSTRUMENT=" + intrumenttype + "\n")
            else:
                mgf_file.write("BEGIN IONS\n")
            if (names != None):
                mgf_file.write("NAME=" + names[i] + "\n")
            if (casnos != None):
                mgf_file.write("CASNO=" + casnos[i] + "\n")

            for j in range(len(mass_values_list[i])):
                mass, intensity = mass_values_list[i][j], intensity_values_list[i][j]
                mgf_file.write(f"{mass} {intensity}\n")  # 改用f-string更简洁
            mgf_file.write("END IONS\n")

为什么这个方案有效

Python的open()函数使用"w"模式时,会自动执行两个操作:

  1. 如果文件不存在,创建新文件;
  2. 如果文件已存在,直接截断文件内容为0(清空文件)。
    这完全替代了你先删除再创建的逻辑,还避免了删除与创建之间的时间窗口,从根源上消除了句柄残留导致的占用问题。

额外排查点

如果修改后仍报错,检查以下情况:

  • 是否有其他程序(比如文件浏览器、记事本、杀毒软件)正在打开myspectra.mgf?Windows下这类程序会锁定文件,导致无法修改。
  • 确认之前的multiprocessing Pool已完全关闭,没有子进程残留(虽你说PID一致,仍可通过任务管理器检查是否有额外Python进程)。

内容的提问来源于stack exchange,提问作者Nicolas Romano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:33:25