os.rename [WinError 32] 进程无法访问该文件,因为它正被另一个进程使用

os.rename [WinError 32] The process cannot access the file because it is being used by another process

提问人:refokaj 提问时间:10/17/2023 更新时间:10/17/2023 访问量:32

问:

我正在尝试将文件从源文件夹移动到目标文件夹,但是出现错误

PermissionError 回溯(最近一次调用最后一次) 单元格 In[23],第 9 行 7 print(“将 {} 移动到 {}”.format(os.path.join(sourcepath, f), os.path.join(destination, subpath , f))) 8 #os.makedirs(os.path.join(destination, subpath), exist_ok=True) ----> 9 os.rename(os.path.join(sourcepath, f), os.path.join(destination, subpath , f))

PermissionError:[WinError 32] 进程无法访问该文件,因为它正被另一个进程使用

显然,该文件正在被os.rename使用,但我正在努力关闭循环。 代码为:

sourcepath='C:/source'
destination='C:/destination'

(_,_,fnames) = next(os.walk(sourcepath))
for f in fnames:
    subpath = '/'.join(f.split('erFile_')[:+1])
    print("Moving {} to {}".format(os.path.join(sourcepath, f), os.path.join(destination, subpath, f)))
    os.rename(os.path.join(sourcepath, f), os.path.join(destination, subpath , f))

任何帮助都是值得赞赏的。

python 重命名文件 移动

评论


答:

1赞 Guapi-zh 10/17/2023 #1

在这种情况下,您可以使用该函数,该函数对于文件操作更可靠,并将为您处理打开的文件。下面是一个示例:shutil.move

import os
import shutil

sourcepath = 'C:/source'
destination = 'C:/destination'

(_, _, fnames) = next(os.walk(sourcepath))

for f in fnames:
    subpath = '/'.join(f.split('erFile_')[:+1])
    source_file = os.path.join(sourcepath, f)
    destination_file = os.path.join(destination, subpath, f)
    print("Moving {} to {}".format(source_file, destination_file))
    
    try:
        shutil.move(source_file, destination_file)
    except Exception as e:
        print(f"Error moving {source_file} to {destination_file}: {e}")

评论

0赞 refokaj 10/17/2023
谢谢这个解决方案有效,但错误仍然存在,因为它不会像我以前的解决方案那样停止任务管理器的执行。