2015-08-04 2 views
13

Вот ниже код, который будет двигаться и заменить отдельный файлMove и заменить, если же имя файла уже существует в питона

import shutil 
import os 
src = 'scrFolder' 
dst = './dstFolder/' 
filelist = [] 

files = os.listdir(src) 
for filename in files: 
filelist.append(filename) 
fullpath = src + '/' + filename 
shutil.move(fullpath, dst) 

Если я выполнить ту же команду и движущуюся файл, который уже существует в dst folder я получаю shutil.Error: Destination path './dstFolder/file.txt' already exists хау сделать шаг и заменить, если же имя файла уже существует

ответ

24

Если указать полный путь к месту назначения (а не только каталог), то shutil.move будет перезаписывать существующий файл:

shutil.move(os.path.join(src, filename), os.path.join(dst, filename)) 
+3

делает это также на сетевом диске, у меня есть полный путь к файлу, но он не переписывается, выходя из «Файлов существует» – user1767754

+0

@ user1767754 Я бы только ожидал, что это произойдет, если источник является символической ссылкой , Возможно, вы могли бы задать следующий вопрос? – ecatmur

+0

@ecatmur Я самостоятельно тестировал одно и то же. 1. Если каталог назначения уже имеет исходное имя файла, и вы выполняете 'shutil.move (src_filename, dst_dirname)' ошибка возникает 'Ошибка: путь назначения 'dst_dirname/src_filename' уже существует'. 2. ОДНАКО, если вы выполняете 'dst_filename = os.path.join (dst_dirname, os.path.basename (src_filename)); shutil.move (src_filename, dst_filename) '->, тогда вы не получите исключение. –