2014-07-23 5 views
0

То, что я пытаюсь сделать, это скопировать файл или каталог из 'src' в 'dst', однако, если файл, который копируется, находится в 'dst' местоположении, t хотите, чтобы операция перезаписывала существующий файл. Можно ли это сделать непосредственно с помощью shutil или просто проверить каталог «dst» для «src», и если он существует, предложите пользователю переименовать файл, который они копируют? В принципе, я хочу создать простую систему «управления версиями» с помощью python.Как выполнить команду с использованием команд копирования в python

+0

так что файлы имеют то же имя, но различное содержимое? –

+0

Да. Я работаю прямо сейчас, проверяя, существует ли файл/каталог, и поэтому пользователь должен изменить имя. Мне было любопытно, хотя, если бы был хороший способ упростить код, используя shutil, поскольку я использую команды копирования, которые он предоставляет. –

+0

вы можете добавить предопределенный суффикс, который вы позволяете пользователю выбирать для дубликатов файлов в начале, чтобы избежать необходимости спрашивать пользователя каждый раз, когда вы сталкиваетесь с файлом с тем же именем, но также есть небольшая вероятность, что вы все еще можете столкнуться с дублирующими файлами, даже используя это способ. –

ответ

0

Вот что я придумал. Это довольно грубо. Если у кого есть предложения о том, как уменьшить размер кода, дайте мне знать.

import os 
import shutil 

srcCheck = 'n' 
dstCheck = 'n' 

dstDirVer = 2 
dstFileVer = 2 

dirExitVar = False 
fileExitVar = False 

src = input('Directory or file to be commited: \n') 
print('Is this directory or file correct? > ' + src) 

srcCheck = input('(y/n) > ') 

while srcCheck != 'y': 
    src = input('Directory or file to be commited: \n') 
    print('Is this directory or file correct? > ' + src) 
    srcCheck = input('(y/n) > ') 

while dstCheck != 'y': 
    dst = input('Where to commit: \n') 
    print('Is this directory or file correct? > ' + dst) 
    dstCheck = input('(y/n) > ') 

srcIsDir = os.path.isdir(src) 
dstDirExist = os.path.isdir(dst) 
dstFileExist = os.path.isfile(dst) 

while dstDirExist == True: 

    while dirExitVar == False: 

     try: 
      dstPrevDir, dstDirVer = dst.rsplit("v",1) 

     except ValueError: 
      dst = dst + '_v' + str(dstDirVer) 

     dirExitVar = True 

    dstPrevDir, dstDirVer = dst.rsplit("v",1) 
    dstDirVer = int(dstDirVer) + 1 
    dst = dstPrevDir + 'v' + str(dstDirVer) 
    dstDirExist = os.path.isdir(dst) 


while dstFileExist == True: 

    dstPrevFile, dstExt = dst.rsplit(".",1) 

    while fileExitVar == False: 

     try: 
      dstPrevFileRoot, dstFileVer = dstPrevFile.rsplit("v",1) 

     except ValueError: 
      dstPrevFile = dstPrevFile + '_v' + str(dstFileVer) 

     fileExitVar = True 

    dstPrevFileRoot, dstFileVer = dstPrevFile.rsplit("v",1) 
    dst = dstPrevFileRoot + 'v' + str(dstFileVer) + '.' + dstExt 
    dstFileVer = int(dstFileVer) + 1 
    dstFileExist = os.path.isfile(dst) 


if srcIsDir == True: 
    shutil.copytree(src, dst) 
if srcIsDir == False: 
    shutil.copyfile(src, dst) 
Смежные вопросы