Python program to rename file names while overwrit

2019-06-15 04:50发布

As the title says, I wanted a python program that changes the file name, but I wanted to overwrite if there already is a file with that destination name.

import os, sys

original = sys.argv[1]
output = sys.argv[2]

os.rename(original, output)

But my code just shows me this error when there already is file with that destination name.

  os.rename<original, output>
WindowsError: [Error 183] Cannot create a file when that file already exists

What fix should I make?

4条回答
来,给爷笑一个
2楼-- · 2019-06-15 05:10

This error only occurs on windows, as you can find in the python documentation ( https://docs.python.org/2/library/os.html#os.rename )

You should check if there is already a file or folder on the destination, with following code:

import os.path
os.path.exists(destination) 

See also this answer: https://stackoverflow.com/a/84173/955026

If the file exists, remove it first before renaming the original file. Of course you should check if you are not removing the original file (so script.py file1 file1 should not remove file1).

查看更多
成全新的幸福
3楼-- · 2019-06-15 05:12

Please find the below approach which i followed and it is working fine

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

It will overwrite the existing file with new data if it already exist also.

查看更多
对你真心纯属浪费
4楼-- · 2019-06-15 05:24

You can use shutil.move, it will overwrite on windows:

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
查看更多
Explosion°爆炸
5楼-- · 2019-06-15 05:26

On Windows os.rename won't replace the destination file if it exists. You have to remove it first. You can catch the error and try again after removing the file:

import os

original = sys.argv[1]
output = sys.argv[2]

try:
    os.rename(original, output)
except WindowsError:
    os.remove(output)
    os.rename(original, output)
查看更多
登录 后发表回答