【发布时间】:2022-10-15 19:49:06
【问题描述】:
我正在尝试在两个文件夹之间查找重复项,并且只将唯一的图像文件复制到“dest”文件夹中。我可以使用下面的代码复制所有非重复项,但是它不维护源目录结构。我认为 OS.walk 返回 3 个元组,但它们没有链接,所以不确定如何重新构建子目录?
例子:
import shutil, os
from difPy import dif
source = input('Input source folder:')
dest = input('Input backup \ destination folder:')
ext = ('.jpg','.jpeg','.gif','.JPG','.JPEG','.GIF')
search = dif(source, dest)
result = search.result
result
dupes = []
srcfiles = []
filecount = []
failed = []
removed = []
for i in result.values():
dupes.append(i['location'])
for dirpath, subdirs, files in os.walk(source):
for x in files:
if x.endswith(ext):
srcfiles.append(os.path.join(dirpath, x))
for f in srcfiles:
if f not in dupes:
shutil.copy(f, dest)
print('File copied successfully - '+f)
filecount.append(f)
else:
print('File not copied successfully !!!! - '+f)
failed.append(f)
我也尝试过将 shutil.copytree 函数与忽略列表一起使用,但是它需要一个新文件夹并且无法使忽略列表函数工作
shutil.copytree 示例:
for i in result.values():
df = []
df.append(i['filename'])
def ignorelist(source, df):
return [f for f in df if os.path.isfile(os.path.join(source, f))]
shutil.copytree(source, destnew, ignore=ignorelist)
【问题讨论】:
-
github.com/gchamon/sysrsync 可能会以最小的努力为您提供您所追求的。
-
您是否有源文件夹中唯一和重复文件的示例?例如文件夹_A包含:pic1.png、pic2.png、pic9.png; Folder_B contians:pic2.png、picY.png、picW4K.png。我解释您的问题的方式是您希望 Folder_NEW 具有 pic1.png、pic2.png、pic9.png、picY.png、picW4K.png。听起来对吗?
-
@kyrlon,理想情况下,Folder_B 将拥有 pic1.png、pic2.png、pic9.png、picY.png、picW4K.png 而无需创建新文件夹。但是我还不能解决的问题是当 Folder_A 有一个子文件夹时,例如Folder_A\subfolder\pic.png,它只是复制到 Folder_B 而不重新创建该子文件夹(使用第一个示例代码)。
-
使用 shutil.copytree 方法,它需要创建一个新文件夹,因此 Folder_B 将包含 Folder_B\New 和 pic1.png、pic9.png 作为非欺骗。但同样,如果 Folder_A 下有子文件夹,则复制时不会对其进行维护。
-
@W4K1NG 您只需要在调用 shutil.copy 之前告诉 shutil.copy 正确的目的地并确保目录存在 - 请参阅下面的答案。
标签: python python-3.x shutil