1

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

我已经使用批处理程序完成了这项工作,但我想使用 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']  
4

2 回答 2

2

您正在做的只是为了列出没有扩展名的基本名称。您缺少的是检测缺少的内容。

如果您可以轻松地重建目录 1 中的文件名;因为它们具有所有相同的扩展名,例如;然后我会在这里使用集合;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)
于 2013-04-20T13:03:22.713 回答
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
于 2013-04-20T13:04:37.087 回答