Comme le titre l'indique, je voulais un programme python qui modifie le nom du fichier, mais je voulais écraser s'il existait déjà un fichier portant ce nom de destination.
import os, sys
original = sys.argv[1]
output = sys.argv[2]
os.rename(original, output)
Mais mon code me montre simplement cette erreur quand il y a déjà un fichier avec ce nom de destination.
os.rename<original, output>
WindowsError: [Error 183] Cannot create a file when that file already exists
Quel correctif dois-je faire?
Sous Windows, os.rename
ne remplacera pas le fichier de destination s'il existe. Vous devez d'abord l'enlever. Vous pouvez détecter l'erreur et réessayer après avoir supprimé le fichier:
import os
original = sys.argv[1]
output = sys.argv[2]
try:
os.rename(original, output)
except WindowsError:
os.remove(output)
os.rename(original, output)
Vous pouvez utiliser shutil.move , il écrasera les fenêtres:
from shutil import move
move(src,dest)
Démo:
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
Cette erreur ne se produit que sous Windows, comme vous pouvez le trouver dans la documentation de Python ( https://docs.python.org/2/library/os.html#os.rename )
Vous devriez vérifier s'il y a déjà un fichier ou un dossier sur la destination, avec le code suivant:
import os.path
os.path.exists(destination)
Voir aussi cette réponse: https://stackoverflow.com/a/84173/955026
Si le fichier existe, supprimez-le avant de renommer le fichier d'origine. Bien sûr, vous devriez vérifier si vous ne supprimez pas le fichier original (donc script.py file1 file1
ne devrait pas supprimer le fichier1).
* S'il vous plaît trouver l'approche ci-dessous que j'ai suivi et cela fonctionne très bien *
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))
Il écrasera le fichier existant avec de nouvelles données s'il existe déjà.