python 移动文件夹内容而不移动源文件夹

Cho*_*oix 4 python shutil

Shutil.move(src, dst) 是我认为可以完成这项工作的方法,但是,根据 python 2 文档

Shutil.move(src, dst) 递归地将文件或目录 (src) 移动到另一个位置 (dst)。

如果目标是现有目录,则 src 会移动到该目录内。如果目标已经存在但不是目录,则它可能会被覆盖,具体取决于 os.rename() 语义。

这与我的情况有点不同,如下所示:

搬家前: https: //snag.gy/JfbE6D.jpg

shutil.move(staging_folder, final_folder)
Run Code Online (Sandbox Code Playgroud)

搬家后:

https://snag.gy/GTfjNb.jpg

这不是我想要的,我希望将暂存文件夹中的所有内容移至文件夹“final”下,我不需要“staging”文件夹本身。

如果您能提供帮助,我们将不胜感激。

谢谢。

Cho*_*.K. 5

您可以将staging_foldershutil.copytree()中的所有内容移动到Final_folder ,而无需移动staging_folder。调用函数时传递参数。copy_function=shutil.move

对于 Python 3.8:

shutil.copytree('staging_folder', 'final_folder', copy_function=shutil.move, dirs_exist_ok=True)
Run Code Online (Sandbox Code Playgroud)

对于 Python 3.7 及以下版本:

请注意,该参数dirs_exist_ok不受支持。目标Final_folder 不得已存在,因为它将在移动过程中创建。

shutil.copytree('staging_folder', 'final_folder', copy_function=shutil.move)
Run Code Online (Sandbox Code Playgroud)

示例代码(Python 3.8):

>>> os.listdir('staging_folder')
['file1', 'file2', 'file3']

>>> os.listdir('final_folder')
[]

>>> shutil.copytree('staging_folder', 'final_folder', copy_function=shutil.move, dirs_exist_ok=True)
'final_folder'

>>> os.listdir('staging_folder')
[]

>>> os.listdir('final_folder')
['file1', 'file2', 'file3']
Run Code Online (Sandbox Code Playgroud)