如何使用 python 删除文件名中的重复字符?

How to remove duplicate characters in a filename with python?

我正在进行一个删除公司备份文件名中重复字符的小项目。

因为文件名中有巴西字符,所以备份的时候转成utf-8,名字很奇怪。

基本上我需要做的就是把 StraAAAAAAAnge NaAAAAAme 变成 Strange Name

我设法修复了所有问题,除非我们在文件名中重复了多个 'A' 个字符。 这是我到目前为止编写的代码:

import os
import itertools


def remove_sequential(filename):
    to_remove = 'A'
    new_name = "".join(k if k in to_remove else "".join(v) for k,v in itertools.groupby(filename, lambda c: c))
    os.rename(filename, new_name)


def rename_files(root):

    for root, dirs, files in os.walk(root):

        for d in dirs:
            try:
                remove_sequential(os.path.join(root, d))
            except OSError as error:
                print(error)
                continue

        for f in files:
            try:
                remove_sequential(os.path.join(root, f))
            except OSError as error:
                print(error)
                continue

当我 运行 代码时,它不会重命名文件。但是当我对字符串使用相同的逻辑时,它就起作用了。

有谁知道那是什么?

非常感谢。

如果您发布的代码是您的完整脚本,那么它什么也没做。您正在声明 rename_files 函数,但您没有声明 运行.


我还要注意,如果您的文件名如下所示:

Olá Mundo. Isto é um teste

这实际上并不是 随机 垃圾,尽管它看起来像是。你可以这样解码:

>>> s = 'Olá Mundo. Isto é um teste'
>>> decoded = bytes(s, encoding='latin').decode()
>>> decoded
'Olá Mundo. Isto é um teste'

因此您的函数可能如下所示:

def remove_sequential(filename):
    new_name = bytes(filename, encoding='latin').decode()
    os.rename(filename, new_name)