Программа 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
что я делаю?
3 ответов
На 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)
можно использовать shutil.двигайся!--4-->, он будет перезаписывать на windows:
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
эта ошибка возникает только в windows, как вы можете найти в документации python (https://docs.python.org/2/library/os.html#os.rename)
вы должны проверить, есть ли уже файл или папка в месте назначения, со следующим кодом:
import os.path
os.path.exists(destination) 
см. Также этот ответ:https://stackoverflow.com/a/84173/955026
Если файл существует, удалите его перед переименованием исходного файла. Конечно, вы должны проверить, если вы не удаляете исходный файл (так script.py file1 file1 Не следует удалять file1).