Python 如何正确重命名文件夹?

Python 如何正确重命名文件夹?,python,python-2.7,Python,Python 2.7,我想以编程方式编辑文件夹名称。在windows上,它工作得完美无缺——在linux上,它有点坏了 unix上的区域设置工作正常-使用en_US.UTF-8 当我在脚本使用的同一路径上创建目录(称为Äöü)时,它正确地显示为Äöü。Python生成目录时,其可见形式为A?A¨A¼ 输入 实际产量 A?A¨A¼ 预期产量 Aeoeue 我有一组必须替换的字符 ä : ae Ä : Ae ö : oe Ö : Oe ü : ue Ü : Ue á : a à : a Á : A ..

我想以编程方式编辑文件夹名称。在windows上,它工作得完美无缺——在linux上,它有点坏了 unix上的区域设置工作正常-使用
en_US.UTF-8
当我在脚本使用的同一路径上创建目录(称为
Äöü
)时,它正确地显示为
Äöü
。Python生成目录时,其可见形式为
A?A¨A¼

输入

实际产量
A?A¨A¼

预期产量
Aeoeue

我有一组必须替换的字符

ä : ae        
Ä : Ae
ö : oe
Ö : Oe
ü : ue
Ü : Ue
á : a
à : a
Á : A
....
以下是我读取文件的方式:

def __getChars(file):
    chars = {}
    with open(file) as f:
        content = f.readlines()
    for c in content:
        c = c.split(':')
        x = c[0].strip()

        try:
            y = c[1].strip()
        except:
            y = ''
        chars[x] = y
    return chars

这就是我替换名字的方式

def __replace(string):
    try:
        string = string.encode('utf8')
    except:
        pass
    for char in chars.keys():
        key = char
        value = chars[key]
        string = string.replace(key, value)
    return string
这就是我如何调用
\u replace()


问题出在这个黑客中:

repr(path).decode('unicode-escape')
您无法确定不同系统上的字节码编码,即使在具有不同系统编码或不同编译Python(例如CygWin或PyWin)的Windows上也是如此。唯一可靠的方法是通过使用unicode路径调用
listdir
来获取unicode格式的文件名列表,例如
os.listdir(u.)
os.listdir(root.decode('utf-8'):
。使用unicode执行所有文件系统操作要好得多

我甚至编写了一个类似的简单程序,可以在Python2和Python3中正常工作,并且可以将树中的所有文件和目录重命名为ASCII。你的大多数替换,只有删除口音的字母可以通过

from unicodedata import normalize
out_str = normalize('NFKD', in_str).encode('ascii', 'ignore').decode('ascii')

您还需要给出错误/意外输出。基本上,什么是有效的,什么是无效的。orig name:‘Äöü’output:‘A?A¨A¼’哦,我不清楚你写它的方式。您应该明确地将其作为预期输出和实际输出
from unicodedata import normalize
out_str = normalize('NFKD', in_str).encode('ascii', 'ignore').decode('ascii')