Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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_Python 3.x_Python 3.6 - Fatal编程技术网

使用Python重命名重复文件

使用Python重命名重复文件,python,python-3.x,python-3.6,Python,Python 3.x,Python 3.6,我正在尝试编写一个Python脚本,递归地重命名所有重复的文件名(即在所有目录中) 我已经搜索了网页和堆栈溢出,但我找不到任何答案。。。 这是我的密码: #!/usr/bin/env python3.6 import os import glob path = os.getcwd() file_list = [] duplicates={} # remove filename duplicates for file_path in glob.glob(path + "/**/*.c", re

我正在尝试编写一个Python脚本,递归地重命名所有重复的文件名(即在所有目录中) 我已经搜索了网页和堆栈溢出,但我找不到任何答案。。。 这是我的密码:

#!/usr/bin/env python3.6
import os
import glob

path = os.getcwd()
file_list = []
duplicates={}

# remove filename duplicates
for file_path in glob.glob(path + "/**/*.c", recursive=True):
    file = file_path.rsplit('/', 1)[1]
    if file not in file_list:
        file_list.append(file)
    else:
        if file in duplicates.keys():
            duplicates[file] += 1
            lista = []
            lista.append(file_path)
            os.rename(file_path, file_path.rsplit('/', 1)[:-1] + '/' + str(duplicates[file]) + file)
        else:
            duplicates[file] = 1
            os.rename(file_path, file_path.rsplit('/', 1)[:-1] + '/' + str(duplicates[file]) + file)
这就是我得到的错误:

Traceback (most recent call last):
  File "/home/andre/Development/scripts/removeDuplicates.py", line 22, in <module>
    os.rename(file_path, file_path.rsplit('/', 1)[:-1] + '/' + str(duplicates[file]) + file)
TypeError: can only concatenate list (not "str") to list
回溯(最近一次呼叫最后一次):
文件“/home/andre/Development/scripts/removeDuplicates.py”,第22行,在
重命名(文件路径,文件路径.rsplit('/',1)[:-1]+'/'+str(重复的[file])+file)
TypeError:只能将列表(而不是“str”)连接到列表

我知道我为什么会犯这个错误,但我的问题是:有没有更聪明的方法来做到这一点?我还想重命名所有重复的目录名,但我仍然没有弄明白…

您正在寻找遍历目录树的方法…谢谢@AkshatMahajan!那真的很有用。但是现在,在查看文件名是否重复后,如何更改文件名?我该如何更改重复的目录名?很抱歉打扰您,我想我自己可以做到这一点hahaJust自下而上遍历目录树,跟踪到目前为止您在集合中的目录中看到的所有名称。计数器可确定要追加的编号。os.rename适用于目录路径和文件名路径。谢谢@AkshatMahajan!