C#转Python开发者求助:文件写入读取后删除提示正被占用
Python 文件写入、读取后删除的正确实现
你遇到的文件占用问题,根源在于读取文件时没有正确释放文件句柄,另外代码里还有一些不必要的操作,结合你熟悉的C# using 语法,给你整理正确的实现方式:
问题分析
- 你的写入代码里,
with语句会自动帮你关闭文件,后面的f.close()完全多余,甚至可能引发异常(因为with结束后f已经是关闭状态)。 - 读取文件时,你直接
open后只调用了read(),没有关闭文件,导致文件句柄被占用,执行os.remove时就会报错。 - 代码里缺少
import os语句,否则os.remove会直接报错。
正确代码示例
方式一:全程用with语句(推荐,类似C#的using,自动管理资源)
import os strPath = r"C:\temp\test.txt" # 写入文件,with自动关闭流 with open(strPath, "xt") as f: f.write("XYZ\n") # 如果你需要换行,加上\n,和C#的WriteLine对应 # 读取文件,同样用with自动释放 with open(strPath, "r") as f: strReadFile = f.read() # 删除文件 os.remove(strPath)
方式二:手动关闭文件(不推荐,容易遗漏)
如果你想手动管理文件句柄,记得读取后一定要关闭:
import os strPath = r"C:\temp\test.txt" # 写入 with open(strPath, "xt") as f: f.write("XYZ\n") # 读取后手动关闭 f = open(strPath, "r") strReadFile = f.read() f.close() # 必须调用,释放文件句柄 os.remove(strPath)
补充说明
- Python的
with语句和C#的using作用完全一致,都是自动处理资源释放,所以写入和读取都尽量用with,避免手动管理的失误。 - 模式
"xt"是Python 3.3+新增的,意思是创建新文件写入,如果文件已存在会报错,和C#里StreamWriter默认覆盖不同,如果你需要覆盖已有文件,可以用"wt"模式。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

