2015-08-04 6 views
13

Oto poniżej kod, który będzie poruszać i zastąpić pojedynczy plikMove i wymienić jeśli sama nazwa pliku już istnieje w Pythonie

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) 

Jeśli mogę wykonać to samo polecenie i przenoszenie plików, które istniały już w dst folder Dostaję shutil.Error: Destination path './dstFolder/file.txt' already exists jak zrobić ruch i wymienić jeśli sama nazwa pliku już istnieje

Odpowiedz

24

Jeśli podasz pełną ścieżkę do miejsca przeznaczenia (nie tylko w katalogu), a następnie shutil.move zastąpi istniejący plik:

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

działa to również na dysku sieciowym, mam pełną ścieżkę do pliku, ale to nie jest przesłonięcie, wyjście z "Plik istnieje" – user1767754

+0

@ user1767754 Spodziewam się, że tak się stanie, jeśli źródło jest dowiązaniem symbolicznym . Być może mógłbyś zadać następne pytanie? – ecatmur

+0

@egatmur Niezależnie testowałem to samo. 1. Jeśli katalog docelowy ma już nazwę źródłową, a robisz 'shutil.move (src_filename, dst_dirname)' zostanie zgłoszony błąd 'Błąd: Ścieżka docelowa 'dst_dirname/src_filename" już istnieje ". 2. JEDNAKŻE, jeśli zrobisz "dst_filename = os.path.join (dst_dirname, os.path.basename (src_filename)); shutil.move (src_filename, dst_filename) '-> wtedy nie otrzymujesz wyjątku podniesionego. –

Powiązane problemy