使用os重命名目录中的多个文件并返回错误

时间:2018-10-25 18:26:56

标签: python

我正在尝试使用os模块重命名目录中的某些文件,但出现错误

  

回溯(最近一次通话最后一次):文件“ rename.py”,第32行,在            Rename()文件“ rename.py”,第28行,在Rename中         os.rename((final_directory +'/'+ file),(final_directory +'/'+ file.replace('。csv','_1m.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()

2 个答案:

答案 0 :(得分:1)

问题是Windows操作系统不区分大小写。

程序在insert into appserver_prop (environment_id, property_id) select 497, property_id from prop_info where property_name like '%CPNIB%'; 中循环时,它已经将文件重命名为india_2018-10-25 (7).csv。当您尝试将文件india_2018-10-25_1M.csv另存为india_2018-10-25.csv时,由于该文件已经存在,india_2018-10-25_1m.csv返回错误。

解决方案:在区分大小写的基础上,确保重命名条件是唯一的。

此外,最好遵循DRY惯例并简化代码:

os

答案 1 :(得分:1)

您正在尝试将文件重命名为文件夹中已经存在的名称。 确保您在values而不是india_2018-10-25.csv上排名第一。 找到一种方法来确定原始的cav名称

india_2018-10-25 (7).csv