在我的代码中,用户上传保存在服务器上并使用服务器路径读取的文件。我在读完文件后试图从该路径中删除该文件。但它反过来给了我错误:
An error occurred while reading file. [WinError 32] The process cannot access the file because it is being used by another process
我正在使用with
阅读文件,我已尝试f.close()
和f.closed
但每次都出现相同的错误。
这是我的代码:
f = open(filePath)
with f:
line = f.readline().strip()
tempLst = line.split(fileSeparator)
if(len(lstHeader) != len(tempLst)):
headerErrorMsg = "invalid headers"
hjsonObj["Line No."] = 1
hjsonObj["Error Detail"] = headerErrorMsg
data['lstErrorData'].append(hjsonObj)
data["status"] = True
f.closed
return data
f.closed
在这段代码之后我调用了remove函数:
os.remove(filePath)
使用with open(filePath) as f:
编辑,然后尝试删除该文件会产生同样的错误。
答案 0 :(得分:2)
而不是:
f.closed
你需要说:
f.close()
closed
只是文件对象的布尔属性,用于指示文件是否实际关闭。
close()
是文件对象上实际关闭文件的方法。
附注:关闭文件句柄后尝试删除文件不是100%可靠。该文件可能仍会被病毒扫描程序或索引器扫描。或者其他一些系统挂钩正在等待文件引用等...如果删除失败,请等待一秒再试一次。
答案 1 :(得分:2)
此
import os
path = 'path/to/file'
with open(path) as f:
for l in f:
print l,
os.remove(path)
应该可以工作,语句会在嵌套的代码块
之后自动关闭文件如果失败,文件可能会被某些外部因素使用。你可以使用重做模式。
while True:
try:
os.remove(path)
break
except:
time.sleep(1)
答案 2 :(得分:1)
使用以下代码:
import os
os.startfile('your_file.py')
完成后删除:
os.remove('your_file.py')