shutil.move(src, dst) 是我认为可以完成这项工作的方法,但是,根据 Python 2 文档:
shutil.move(src, dst) 递归地将文件或目录(src)移动到 另一个地点(夏令时)。
如果目标是现有目录,则 src 会移至其中 那个目录。如果目的地已存在但不是 目录,它可能会被覆盖,具体取决于 os.rename() 语义。
这与我的情况有点不同,如下:
搬家前: https://snag.gy/JfbE6D.jpg
shutil.move(staging_folder, final_folder)
搬家后: https://snag.gy/GTfjNb.jpg
这不是我想要的,我希望将暂存文件夹中的所有内容移至文件夹“final”下,我不需要“staging”文件夹本身。
您可以使用
shutil.copytree()
将 staging_folder 中的所有内容移动到 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)
对于 Python 3.7 及以下版本:
请注意,不支持参数
dirs_exist_ok
。目的地 final_folder 不得已存在,因为它将在移动过程中创建。
shutil.copytree('staging_folder', 'final_folder', copy_function=shutil.move)
>>> 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']
事实证明路径不正确,因为它包含被误解的内容。
我最终使用了 Shutil.move + Shutil.copy22
for i in os.listdir(staging_folder):
if not os.path.exists(final_folder):
shutil.move(os.path.join(staging_folder, i), final_folder)
else:
shutil.copy2(os.path.join(staging_folder, i), final_folder)
然后清空旧文件夹:
def emptify_staging(self, folder):
for the_file in os.listdir(folder):
file_path = os.path.join(folder, the_file)
try:
if os.path.isfile(file_path):
os.unlink(file_path)
# elif os.path.isdir(file_path): shutil.rmtree(file_path)
except Exception as e:
print(e)
您可以使用
os.listdir
,然后将每个文件移动到所需的目的地。
例如:
import shutil
import os
for i in os.listdir(staging_folder):
shutil.move(os.path.join(staging_folder, i), final_folder)