Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用操作系统重命名目录中的多个文件时返回错误_Python - Fatal编程技术网

Python 使用操作系统重命名目录中的多个文件时返回错误

Python 使用操作系统重命名目录中的多个文件时返回错误,python,Python,我正在尝试使用os模块重命名目录中的一些文件,但出现错误 回溯(最近一次调用last):文件“rename.py”,第32行,在 Rename()文件“Rename.py”,在Rename中的第28行 os.rename((最终目录+'/'+文件),(最终目录+'/'+文件.替换('.csv','.csv'))Windows错误: [错误183]无法在文件已存在时创建该文件 我试图用唯一的名称重命名8个csv文件,我看到第一个if语句返回了错误,但当我删除其他7个elif语句时,这就行了 任何帮

我正在尝试使用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
不存在?我不知道这个区分大小写的问题,非常感谢!不客气,我还添加了一个关于优化代码的建议,这样您的条件就不会那么拥挤了。看一看。