2013-04-20 3 views
0

У меня есть две папки в окнах. Оба они имеют файлы с тем же именем, но с разным расширением. Я пытаюсь сравнить эти две папки, и если у них есть файлы с одинаковыми именами, мне нужно скопировать их из одной папки в другую.Python: Сравните две папки и переместите файлы с тем же именем из одной папки в другую

Я сделал это с помощью пакетных программ, но я хочу, чтобы эти ребята использовали 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

ли расширения всегда будет то же самое? Скажите '.ext1' в одном месте и' .ext2' в другом? –

+0

Да, расширения всегда одинаковы. –

+0

Я только что видел модуль затвора, это будет полезно? –

ответ

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) 
+0

Привет! Это работает хорошо, спасибо. Но shutil заменяет файл независимо от расширения. Файл скопирован в пункт назначения, но я не хочу, чтобы файл был заменен. Я хочу, чтобы оба файла существовали в папке назначения. Например, test.ext1 и test.ext2 оба должны присутствовать в dest. Я был бы очень признателен за любую помощь. –

+0

@AniShetty: Итак, вы хотите скопировать 'file.ext1' в' dest', только если существует файл 'file.ext2'? Вы должны быть * clear * в своих правилах копирования. –

+0

Ага да! правильно. –

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 
Смежные вопросы