【问题标题】:Python:The process cannot access the file because it is being used by another processPython:该进程无法访问该文件,因为它正在被另一个进程使用
【发布时间】:2018-12-04 06:58:04
【问题描述】:
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)

在这里,我想读取 .txt 文件中的内容,然后擦除内容并将其删除。但它总是显示它无法删除它,因为“该进程无法访问该文件,因为它正在被另一个进程使用”。
其实我需要的是删除.txt文件,但有时不能立即删除,所以我先删除内容以防再次读取。那么有没有什么好的方法可以读取 .txt 文件中的内容,然后尽快稳定地删除这个文件呢?

【问题讨论】:

  • 这个问题解决了吗?我在您说的页面下方看到即使您删除了不必要的 .close() 调用,它仍然拒绝删除文件?你修好了吗?

标签: python python-3.x


【解决方案1】:

不应致电f.close()g.close()。它由with 语句自动调用。

【讨论】:

  • 其实我擦掉.close之后还是不行。
【解决方案2】:

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

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)

仅供参考,如果您不控制该文件的内容,则执行该文件的内容是不好的形式。

另一种选择:

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)

【讨论】:

    【解决方案3】:

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

        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
    

    另一种方法是使用:

    os.remove(masterpath)
    

    【讨论】:

    • 对不起还有什么办法?你能解释一下吗?
    • @Andy 尝试在您的 os.remove 呼叫周围添加一个短暂睡眠的重试循环。
    猜你喜欢
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多