gpt4 book ai didi

Python - move 和覆盖文件和文件夹

转载 作者:IT老高 更新时间:2023-10-28 21:43:38 31 4
gpt4 key购买 nike

我有一个目录,'Dst Directory',里面有文件和文件夹,我有'src Directory',里面也有文件和文件夹。我想要做的是将'src Directory'的内容 move 到'Dst Directory'并覆盖任何同名的文件。因此,例如“Src Directory\file.txt”需要 move 到“Dst Directory\”并覆盖现有的file.txt。这同样适用于某些文件夹, move 文件夹并将内容与 'dst directory' 中的同一文件夹合并

我目前正在使用 shutil.move 将 src 的内容 move 到 dst 但如果文件已经存在并且不会合并文件夹,它将不会这样做;它只会将文件夹放在现有文件夹中。

更新:为了让事情更清楚一点,我正在做的是将存档解压缩到 Dst 目录,然后将 Src 目录的内容 move 到那里并重新压缩,从而有效地更新 zip 存档中的文件。这将重复添加新文件或文件的新版本等,这就是它需要覆盖和合并的原因

已解决:我通过使用 distutils.dir_util.copy_tree(src, dst) 解决了我的问题,这会将文件夹和文件从 src 目录复制到 dst 目录,并在必要时覆盖/合并。希望对一些人有所帮助!

希望这是有道理的,谢谢!

最佳答案

这将遍历源目录,创建目标目录中尚不存在的任何目录,并将文件从源目录 move 到目标目录:

import os
import shutil

root_src_dir = 'Src Directory\\'
root_dst_dir = 'Dst Directory\\'

for src_dir, dirs, files in os.walk(root_src_dir):
dst_dir = src_dir.replace(root_src_dir, root_dst_dir, 1)
if not os.path.exists(dst_dir):
os.makedirs(dst_dir)
for file_ in files:
src_file = os.path.join(src_dir, file_)
dst_file = os.path.join(dst_dir, file_)
if os.path.exists(dst_file):
# in case of the src and dst are the same file
if os.path.samefile(src_file, dst_file):
continue
os.remove(dst_file)
shutil.move(src_file, dst_dir)

在被相应的源文件替换之前,将首先删除任何预先存在的文件(通过 os.remove)。目标中已存在但源中不存在的任何文件或目录都将保持不变。

关于Python - move 和覆盖文件和文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7419665/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com