Python:比较两个文件夹并将具有相同名称的文件从1个文件夹移动到另一个文件夹

时间:2013-04-20 12:39:14

标签: python

我在Windows中有两个文件夹。这两个文件具有相同的名称但具有不同的扩展名。我正在尝试比较这两个文件夹,如果它们有相同名称的文件,我需要将它们从1个文件夹复制到另一个文件夹。

我使用批处理程序完成了这项工作,但我想使用Python做这些人。 我在这里搜索了一些零碎的东西,但是我不确定我是不是正确的? 你能帮帮我吗?

exm1=[os.path.splitext(x)[0] for x in os.listdir(r'\Path') if os.path.splitext(x)[1]=='.trn']
exm2=[os.path.splitext(x)[0] for x in os.listdir(r'\Path') if os.path.splitext(x)[1]=='.trn']  

2 个答案:

答案 0 :(得分:2)

你正在考虑只列出没有扩展名的基本名称。你缺少的是发现缺少的东西。

如果您可以轻松地重建目录1中的文件名;因为它们具有相同的扩展名,例如;然后我在这里使用 sets ; sets使列表容易列出两个目录之间的差异:

import os.path
import shutil

source = r'\Path1'
dest = r'\Path2'

sourcefiles = {os.path.splitext(x)[0] for x in os.listdir(source) if os.path.splitext(x)[1] == '.ext1'}
destfiles = {os.path.splitext(x)[0] for x in os.listdir(source) if os.path.splitext(x)[1] == '.ext2'}

for missing in sourcefiles - destfiles:   # calculate the difference
    sourcefile = os.path.join(source, missing + '.ext1')
    destfile = os.path.join(dest, missing + '.ext2')
    shutil.copy(sourcefile, destfile)

答案 1 :(得分:0)

这会将文件夹1中没有的所有文件复制到2,反之亦然

import os
import shutil

folder1 = "C:\\path\\folder\\1\\"
folder2 = "C:\\path\\folder\\2\\"
data_folder1 = [(x[0], x[2]) for x in os.walk(folder1)]
data_folder2 = [(x[0], x[2]) for x in os.walk(folder2)]

x=0
for file in data_folder1[0][1]:
    if file not in data_folder2:
        shutil.copy(folder1+data_folder1[0][1][x], folder2+data_folder1[0][1][x])
    x+=1

y=0
for file in data_folder2[0][1]:
    if file not in data_folder1:
        shutil.copy(folder2+data_folder2[0][1][y], folder1+data_folder2[0][1][y])
    y+=1