Windows中的os.remove()给出了“另一个进程正在使用的[错误32]”

时间:2015-02-08 17:05:58

标签: python windows

我知道在SO和其他地方安静之前已经问过这个问题了。我仍然无法完成它。如果我的英语不好,我很抱歉

在linux中删除文件要简单得多。只是os.remove(my_file)完成了这项工作,但在Windows中它提供了

    os.remove(my_file)
WindowsError: [Error 32] The process cannot access the file because it is being used by another process: (file-name)

我的代码:

line_count = open(my_file, mode='r')        #
t_lines = len(line_count.readlines())       # For total no of lines
outfile = open(dec_file, mode='w')
with open(my_file, mode='r') as contents:
    p_line = 1
    line_infile = contents.readline()[4:]
    while line_infile:
        dec_of_line = baseconvert(line_infile.rstrip(),base16,base10)
        if p_line == t_lines:
            dec_of_line += str(len(line_infile)).zfill(2)
            outfile.write(dec_of_line + "\r\n")
        else:
            outfile.write(dec_of_line + "\r\n")
        p_line += 1
        line_infile = contents.readline()[4:]
outfile.close()
os.remove(my_file)

此处my_file是一个包含文件完整路径结构的变量。同样聪明的dec_file也包含路径,但是包含新文件。我试图删除的文件是read mode下使用的文件。需要一些帮助。

我的尝试:

  1. 尝试关闭文件my_file.close()。我得到的相应错误是AttributeError: 'str' object has no attribute 'close'。我知道,当一个文件进入时 read mode它会在结束时自动关闭 文件。但我还是试了一下
  2. os.close(my_file)按照https://stackoverflow.com/a/1470388/3869739进行了尝试。我的错误为TypeError: an integer is required
  3. 或者,我是因为我打开了文件而得到此错误 两次(用于计算行数和读取文件内容),..?

1 个答案:

答案 0 :(得分:5)

通过使用with上下文来读取或写入文件的Pythonic方式。

阅读文件:

with open("/path/to/file") as f:
    contents = f.read()
    #Inside the block, the file is still open

# Outside `with` here, f.close() is automatically called.

写:

with open("/path/to/file", "w") as f:
    print>>f, "Goodbye world"

# Outside `with` here, f.close() is automatically called.

现在,如果没有其他进程读取或写入文件,并假设您拥有所有权限,则应该能够关闭该文件。 很可能存在资源泄漏(文件句柄未关闭),因为Windows不允许您删除文件。解决方案是使用with


此外,澄清其他几点:

  • 它是垃圾收集器,在对象被销毁时导致关闭流。完整阅读后文件不会自动关闭。如果程序员想要倒带那就没有意义,是吗?
  • os.close(..)在内部调用带有整数文件描述符的C-API close(..)。你通过时不是字符串。