Python 使用操作系统重命名目录中的多个文件时返回错误
我正在尝试使用os模块重命名目录中的一些文件,但出现错误 回溯(最近一次调用last):文件“rename.py”,第32行,在 Rename()文件“Rename.py”,在Rename中的第28行 os.rename((最终目录+'/'+文件),(最终目录+'/'+文件.替换('.csv','.csv'))Windows错误: [错误183]无法在文件已存在时创建该文件 我试图用唯一的名称重命名8个csv文件,我看到第一个if语句返回了错误,但当我删除其他7个elif语句时,这就行了 任何帮助都将不胜感激 这是文件源文件名Python 使用操作系统重命名目录中的多个文件时返回错误,python,Python,我正在尝试使用os模块重命名目录中的一些文件,但出现错误 回溯(最近一次调用last):文件“rename.py”,第32行,在 Rename()文件“Rename.py”,在Rename中的第28行 os.rename((最终目录+'/'+文件),(最终目录+'/'+文件.替换('.csv','.csv'))Windows错误: [错误183]无法在文件已存在时创建该文件 我试图用唯一的名称重命名8个csv文件,我看到第一个if语句返回了错误,但当我删除其他7个elif语句时,这就行了 任何帮
india_2018-10-25 (1).csv
india_2018-10-25 (2).csv
india_2018-10-25 (3).csv
india_2018-10-25 (4).csv
india_2018-10-25 (5).csv
india_2018-10-25 (6).csv
india_2018-10-25 (7).csv
india_2018-10-25.csv
这是代码
import os
def Rename():
current_directory = os.getcwd()
final_directory = os.path.join(current_directory, r'data')
if not os.path.exists(final_directory):
os.makedirs(final_directory)
for file in os.listdir(final_directory):
#print(file)
if "(" not in file:
os.rename((final_directory+'/'+file), (final_directory+'/'+file.replace('.csv', '_1m.csv')))
elif file.endswith('(1).csv'):
os.rename((final_directory+'/'+file), (final_directory+'/'+file.replace(' (1)', '_5m')))
elif file.endswith('(2).csv'):
os.rename((final_directory+'/'+file), (final_directory+'/'+file.replace(' (2)', '_15m')))
elif file.endswith('(3).csv'):
os.rename((final_directory+'/'+file), (final_directory+'/'+file.replace(' (3)', '_1h')))
elif file.endswith('(4).csv'):
os.rename((final_directory+'/'+file), (final_directory+'/'+file.replace(' (4)', '_4h')))
elif file.endswith('(5).csv'):
os.rename((final_directory+'/'+file), (final_directory+'/'+file.replace(' (5)', '_1D')))
elif file.endswith('(6).csv'):
os.rename((final_directory+'/'+file), (final_directory+'/'+file.replace(' (6)', '_1W')))
elif file.endswith('(7).csv'):
os.rename((final_directory+'/'+file), (final_directory+'/'+file.replace(' (7)', '_1M')))
else:
pass
Rename()
问题是Windows操作系统不区分大小写 当您的程序循环通过
india_2018-10-25(7).csv时,它已将文件重命名为india_2018-10-25_1M.csv
。当您试图将文件india_2018-10-25.csv
保存为india_2018-10-25_1m.csv
,因为它已经存在,os
返回一个错误
解决方案:确保重命名条件在区分大小写的基础上是唯一的
此外,最好遵循干式实践并简化代码:
# define a translation table for the renaming schema
rename_dict = {
' (1)': '_5m',
' (2)': '_15m',
' (3)': '_1h',
' (4)': '_4h',
' (5)': '_1D',
' (6)': '_1W',
' (7)': '_1N',
}
for file in os.listdir(final_directory):
fullpath = os.path.join(final_directory,file)
#print(file)
if "(" not in file:
os.rename(fullpath, os.path.join(final_directory, file.replace('.csv', '_1m.csv')))
else
cond = os.path.splitext(file)[0][-4]
file.replace(cond, rename_dict.get(cond))
os.rename(fullpath, os.path.join(final_directory, file)
您正在尝试将文件重命名为文件夹中已有的名称。
确保您首先查看的是india_2018-10-25.csv,而不是india_2018-10-25(7.csv)。
找到一种方法来确定原始cav名称是什么
fileList = os.listdir(path)
orgName = fileList[0].split(' (')[0]
if not orgName.endswith('.csv'):
orgName += '.csv'
for i in range(1, 8):
newName = orgName.replace('.csv', ' {%s}.csv'%i)
if CheckFilaName(newName): # check if exist and replace
break
那么,哪一个失败了?错误消息提供的信息比您共享的信息多。请参阅和如何创建。@PeterWood我已添加完整的错误消息!目标目录是空的吗?@wwii源目录和目标目录是相同的,你是说india_2018-10-25_1m.csv
不存在?我不知道这个区分大小写的问题,非常感谢!不客气,我还添加了一个关于优化代码的建议,这样您的条件就不会那么拥挤了。看一看。