web-dev-qa-db-ja.com

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

どのような修正を行う必要がありますか?

14
user42459

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

shutil.move を使用できます。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
6

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)を削除しないでください。

0
Snicksie

私が従った以下のアプローチを見つけてください、それはうまくいきます

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

既存のファイルも存在する場合は、新しいデータで上書きします。

0
Shabir