Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:进程无法访问该文件,因为另一个进程正在使用该文件_Python_Python 3.x - Fatal编程技术网

Python:进程无法访问该文件,因为另一个进程正在使用该文件

Python:进程无法访问该文件,因为另一个进程正在使用该文件,python,python-3.x,Python,Python 3.x,在这里,我想读取.txt文件中的内容,然后擦除内容并将其删除。但它始终显示无法删除该文件,因为“该进程无法访问该文件,因为它正被另一进程使用”。 实际上我需要的是删除.txt文件,但有时它不能立即删除,所以我先删除内容,以防再次读取。那么,有没有什么好方法可以读取.txt文件中的内容,然后尽快稳定地删除此文件?您不应该调用f.close()或g.close()。它由和语句自动调用 尝试在异常部分使用短睡眠: try: masterpath = os.path.join(path, "ma

在这里,我想读取.txt文件中的内容,然后擦除内容并将其删除。但它始终显示无法删除该文件,因为“该进程无法访问该文件,因为它正被另一进程使用”。

实际上我需要的是删除.txt文件,但有时它不能立即删除,所以我先删除内容,以防再次读取。那么,有没有什么好方法可以读取.txt文件中的内容,然后尽快稳定地删除此文件?

您不应该调用
f.close()
g.close()
。它由
语句自动调用

尝试在异常部分使用短睡眠:

try:
    masterpath = os.path.join(path, "master.txt") 
    with open(masterpath, 'r') as f:
        s = f.read()
    f.close()
    exec(s)
    with open(masterpath, 'w') as g:
        g.truncate()
    g.close()
    os.remove(masterpath)
另一种方法是使用:

    try:
        masterpath = os.path.join(path, "master.txt") 
        with open(masterpath, 'r') as f:
            s = f.read()
        f.close()
        exec(s)
        with open(masterpath, 'w') as g:
            g.truncate()
        g.close()
        os.remove(masterpath)
   except WindowsError:
            time.sleep(sleep)
        else:
            break

删除不必要的
close()
语句以开始-就像提到的@grapes-为什么要截断要删除的内容?只要删除它

os.remove(masterpath)
仅供参考,如果您不控制文件内容,则执行文件内容是一种不好的形式

另一种选择:

try:
    masterpath = os.path.join(path, "master.txt") 
    with open(masterpath, 'r') as f:
        s = f.read()
    exec(s)
except Error as e:
    print(e)
else:
    os.remove(masterpath)

对不起,另一种方法是什么?你能解释一下吗?@Andy尝试在你的
操作系统周围添加一个带有短暂睡眠的重试循环。删除
调用。实际上,在我擦除之后。关闭,它仍然不起作用。
masterpath = os.path.join(path, "master.txt") 
with open(masterpath, 'r') as f:
    try:        
        s = f.read()            
    except Error as e:
        print(e)
    else:
        exec(s)
os.remove(masterpath)