2015-08-04 17 views
13

Ecco di seguito il codice che si muoverà e sostituire singoli fileSpostare e sostituire se stesso nome di file già esistente nel pitone

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) 

Se eseguo stesso comando e il file in movimento già esistente nel dst folder sto ottenendo shutil.Error: Destination path './dstFolder/file.txt' already exists come per fare spostare e sostituire se stesso nome di file già esistente

risposta

24

Se si specifica il percorso completo della destinazione (non solo la directory) poi shutil.move sovrascriverà qualsiasi file esistente:

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

funziona anche su un'unità di rete, ho un percorso completo per il file ma non si sovrascrive, uscendo con "File esistente" – user1767754

+0

@ user1767754 Mi aspetto che succeda solo se la sorgente è un collegamento simbolico . Forse potresti fare una domanda di follow-up? – ecatmur

+0

@ecatmur Ho testato in modo indipendente la stessa cosa. 1. se la directory di destinazione ha già il nome file di origine e si esegue 'shutil.move (src_filename, dst_dirname)' viene generato un errore 'Errore: percorso di destinazione 'nome_dst_drc/nomefile_src' esiste già'. 2. TUTTAVIA se si esegue 'dst_filename = os.path.join (dst_dirname, os.path.basename (src_filename)); shutil.move (src_filename, dst_filename) '-> quindi non si ottiene un'eccezione sollevata. –