我有一个可能看起来像的目录结构
Data
Current
A
B
C
Previous
A
X
Run Code Online (Sandbox Code Playgroud)
在尽可能简单/快速的步骤中,我想重命名Current为Previous包含内容并擦除原始内容,使其现在:
Data
Previous
A
B
C
Run Code Online (Sandbox Code Playgroud)
我尝试过类似的东西:
from pathlib import Path
src = Path('Data/Current')
dest = Path('Data/Previous')
src.replace(dest)
Run Code Online (Sandbox Code Playgroud)
文档让我希望这会起作用:
如果target指向现有文件或目录,则将无条件地替换它.
但它似乎确实是有条件的.我得到一个Directory not empty例外.我想我可以先递归删除Previous目录.这基本上是唯一的解决方案吗?或者有更好的方法来实现这一目标吗?
(我更喜欢pathlib,但如果os或者shutil是更好的锤子,我不反对他们)
(我在Linux上运行)
我想创建一个新目录并删除旧目录(如果存在)。我使用以下代码:
if os.path.isdir(dir_name):
shutil.rmtree(dir_name)
os.makedirs(dir_name)
Run Code Online (Sandbox Code Playgroud)
如果目录不存在,它会起作用。
如果目录确实存在并且程序正常运行,则会出错。(WindowsError:[错误 5] 访问被拒绝:'my_directory')
但是,如果目录已经存在并且程序在调试模式下逐行执行,它也可以工作。我想shutil.rmtree()并且makedirs()在他们的通话之间需要一些时间。
什么是正确的代码,以便它不会产生错误?