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

Windows环境下Python如何打开/编辑文件且不触发文件锁定?

实现无锁写入的修改方案

Python 内置的open函数在 Windows 平台打开文件进行写入操作时,默认会启用独占锁,其他进程无法同时读写该文件。你可以通过 pypiwin32 提供的 Win32 API 接口,手动指定文件共享模式来实现写入时不锁定文件的需求。

修改后的完整代码

import win32file
import win32con

# 请根据实际需求给text变量赋值
text = "你需要拼接的参数值"

# 源文件读取逻辑保持不变,你可以根据实际编码调整encoding参数
with open("C:\\Temp\\Fileorg.txt", "rt", encoding="utf-8") as fin:
    # 调用Win32 API打开目标写入文件
    hfile = win32file.CreateFile(
        "C:\\Temp\\File2.txt",
        win32con.GENERIC_WRITE,
        # 核心参数:允许其他进程同时读取、写入该文件
        win32con.FILE_SHARE_READ | win32con.FILE_SHARE_WRITE,
        None,
        # 覆盖已有文件,和原代码wt模式的行为一致
        win32con.CREATE_ALWAYS,
        win32con.FILE_ATTRIBUTE_NORMAL,
        None
    )
    try:
        for line in fin:
            processed_line = line.replace('part/list.txt', f'part/list.txt?id={text}')
            # 文本转字节后写入,编码和读文件的encoding保持一致即可
            win32file.WriteFile(hfile, processed_line.encode("utf-8"))
    finally:
        # 操作完成必须关闭文件句柄
        win32file.CloseHandle(hfile)

注意事项

  • 如果需要追加内容而非覆盖原有文件,将win32con.CREATE_ALWAYS改为win32con.OPEN_ALWAYS,并在写入前添加代码win32file.SetFilePointer(hfile, 0, win32con.FILE_END)将文件指针移到末尾即可
  • 若出现中文乱码,调整读文件的encoding参数和写入时的encode编码参数,保持两者一致即可
  • 该方案只是解除了文件独占锁,如果你写入过程中其他进程同时修改目标文件,可能会出现内容错乱,需要根据业务场景自行做好冲突处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:09:04