我知道在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
下使用的文件。需要一些帮助。
我的尝试:
my_file.close()
。我得到的相应错误是AttributeError: 'str' object has no attribute 'close'
。我知道,当一个文件进入时
read mode
它会在结束时自动关闭
文件。但我还是试了一下os.close(my_file)
按照https://stackoverflow.com/a/1470388/3869739进行了尝试。我的错误为TypeError: an integer is required
答案 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
。
此外,澄清其他几点:
close(..)
。你通过时不是字符串。