我在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']
答案 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