Wie der Titel sagt, wollte ich ein Python-Programm, das den Dateinamen ändert, aber ich wollte es überschreiben, wenn bereits eine Datei mit diesem Zielnamen vorhanden ist.
import os, sys
original = sys.argv[1]
output = sys.argv[2]
os.rename(original, output)
Mein Code zeigt diesen Fehler jedoch nur an, wenn bereits eine Datei mit diesem Zielnamen vorhanden ist.
os.rename<original, output>
WindowsError: [Error 183] Cannot create a file when that file already exists
Was soll ich tun?
Unter Windows ersetzt os.rename
die Zieldatei nicht, wenn sie existiert. Sie müssen es zuerst entfernen. Sie können den Fehler abfangen und es nach dem Entfernen der Datei erneut versuchen:
import os
original = sys.argv[1]
output = sys.argv[2]
try:
os.rename(original, output)
except WindowsError:
os.remove(output)
os.rename(original, output)
Sie können shutil.move verwenden, dies wird unter Windows überschrieben:
from shutil import move
move(src,dest)
Demo:
In [10]: ls
Directory of C:\Users\padraic\Desktop
11/05/2015 20:20 <DIR> .
11/05/2015 20:20 <DIR> ..
11/05/2015 20:20 0 bar.txt
11/05/2015 20:20 0 foo.txt
2 File(s) 0 bytes
2 Dir(s) 47,405,617,152 bytes free
In [11]: shutil.move("bar.txt","foo.txt")
In [12]: ls
Directory of C:\Users\padraic\Desktop
11/05/2015 20:20 <DIR> .
11/05/2015 20:20 <DIR> ..
11/05/2015 20:20 0 foo.txt
1 File(s) 0 bytes
2 Dir(s) 47,405,613,056 bytes free
In [13]: shutil.move("foo.txt","bar.txt")
In [14]: ls
Volume in drive C has no label.
Volume Serial Number is 3C67-52B9
Directory of C:\Users\padraic\Desktop
11/05/2015 20:24 <DIR> .
11/05/2015 20:24 <DIR> ..
11/05/2015 20:20 0 bar.txt
1 File(s) 0 bytes
2 Dir(s) 47,405,568,000 bytes free
Dieser Fehler tritt nur unter Windows auf, wie Sie in der Python-Dokumentation finden können ( https://docs.python.org/2/library/os.html#os.rename ).
Sie sollten prüfen, ob sich am Zielort bereits eine Datei oder ein Ordner mit folgendem Code befindet:
import os.path
os.path.exists(destination)
Siehe auch diese Antwort: https://stackoverflow.com/a/84173/955026
Wenn die Datei vorhanden ist, entfernen Sie sie zuerst, bevor Sie die Originaldatei umbenennen. Natürlich sollten Sie überprüfen, ob Sie die Originaldatei nicht entfernen (daher sollte script.py file1 file1
Datei1 nicht entfernen).
* Finden Sie den untenstehenden Ansatz, dem ich gefolgt bin und es funktioniert gut *
source_file_name = 'Test.xlsx'
dst_file_name = "FinalName.xlsx"
source_file_path = "presentdirectory" #os.getcwd()
dst_file_path = "Destination_Folderpath"
shutil.copy(os.path.join(source_file_path, source_file_name), os.path.join(dst_file_path, dst_file_name))
Wenn vorhanden, wird die vorhandene Datei mit neuen Daten überschrieben.