阅读

时间:2016-09-10 07:32:40

标签: python file

在我的代码中,用户上传保存在服务器上并使用服务器路径读取的文件。我在读完文件后试图从该路径中删除该文件。但它反过来给了我错误:

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:

编辑,然后尝试删除该文件会产生同样的错误。

3 个答案:

答案 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')