Python 重命名文件名的程序,如果已经存在该文件则覆盖
Python program to rename file names while overwriting if there already is that file
正如标题所说,我想要一个 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
我应该做什么修复?
此错误仅发生在 windows,您可以在 python 文档 ( https://docs.python.org/2/library/os.html#os.rename )
中找到
您应该检查目的地是否已经有文件或文件夹,代码如下:
import os.path
os.path.exists(destination)
另请参阅此答案:
如果文件存在,请先将其删除,然后再重命名原始文件。当然你应该检查你是否没有删除原始文件(所以 script.py file1 file1
不应该删除 file1)。
On 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.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
请找到我遵循的以下方法,它运行良好
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))
如果现有文件也已存在,它将用新数据覆盖现有文件。
如果目标文件存在,os.rename() 不会覆盖(至少在 Windows 中)。所以首先检查目标文件是否存在,存在则删除。
import os.path
# first check if file exists
if os.path.exists(outputFilename):
os.remove(outputFilename) # file exits, delete it
# rename the file
os.rename(originalFilename, outputFilename)
另一种选择是使用 shutil.move,它会覆盖目标文件(至少 Windows)。
import shutil
shutil.move(originalFilename, outputFilename)
虽然最好先检查并删除(如果存在)以避免任何潜在错误。
正如标题所说,我想要一个 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
我应该做什么修复?
此错误仅发生在 windows,您可以在 python 文档 ( https://docs.python.org/2/library/os.html#os.rename )
中找到您应该检查目的地是否已经有文件或文件夹,代码如下:
import os.path
os.path.exists(destination)
另请参阅此答案:
如果文件存在,请先将其删除,然后再重命名原始文件。当然你应该检查你是否没有删除原始文件(所以 script.py file1 file1
不应该删除 file1)。
On 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.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
请找到我遵循的以下方法,它运行良好
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))
如果现有文件也已存在,它将用新数据覆盖现有文件。
os.rename() 不会覆盖(至少在 Windows 中)。所以首先检查目标文件是否存在,存在则删除。
import os.path
# first check if file exists
if os.path.exists(outputFilename):
os.remove(outputFilename) # file exits, delete it
# rename the file
os.rename(originalFilename, outputFilename)
另一种选择是使用 shutil.move,它会覆盖目标文件(至少 Windows)。
import shutil
shutil.move(originalFilename, outputFilename)
虽然最好先检查并删除(如果存在)以避免任何潜在错误。