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
相关产品推荐
相关产品推荐

