Python для переименования имен файлов при перезаписи, если уже есть этот файл
Как говорится в названии, мне нужна программа python, которая изменяет имя файла, но я хотел бы перезаписать, если уже есть файл с этим именем назначения.
import os, sys
original = sys.argv[1]
output = sys.argv[2]
os.rename(original, output)
Но мой код просто показывает мне эту ошибку, когда уже есть файл с этим именем назначения.
os.rename<original, output>
WindowsError: [Error 183] Cannot create a file when that file already exists
Какое исправление я должен сделать?
Ответы
Ответ 1
В Windows os.rename
не будет заменен файл назначения, если он существует. Сначала вы должны удалить его. Вы можете поймать ошибку и повторить попытку после удаления файла:
import os
original = sys.argv[1]
output = sys.argv[2]
try:
os.rename(original, output)
except WindowsError:
os.remove(output)
os.rename(original, output)
Ответ 2
Вы можете использовать shutil.move, он будет перезаписан на окнах:
from shutil import move
move(src,dest)
Демо-версия:
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
Ответ 3
Эта ошибка возникает только в окнах, как вы можете найти в документации на python (https://docs.python.org/2/library/os.html#os.rename)
Вы должны проверить, есть ли в папке файл или папка со следующим кодом:
import os.path
os.path.exists(destination)
См. также этот ответ: fooobar.com/questions/125/...
Если файл существует, сначала удалите его, прежде чем переименовать исходный файл. Конечно, вы должны проверить, не удаляете ли вы исходный файл (поэтому script.py file1 file1
не должен удалять файл1).
Ответ 4
Пожалуйста, найдите следующий подход, которому я следовал, и он работает нормально
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))
Он заменит существующий файл новыми данными, если он уже существует.