web-dev-qa-db-de.com

Python-Programm, um Dateinamen beim Überschreiben umzubenennen, wenn diese Datei bereits vorhanden ist

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?

10
user42459

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)
10
sirfz

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
4

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).

0
Snicksie

* 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.

0
Shabir