如何正确重命名文件夹?

卢卡斯

我想以编程方式编辑文件夹名称。在Windows上,它可以完美运行-在Linux上,它有点损坏 A?A¶A¼(Äöü)。
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

这就是我所说的 __replace()

chars = __getChars(os.path.join(os.getcwd(), 'system', 'replace'))

for path in os.listdir(root):
    src = os.path.join(root, path)
    if os.path.isdir(src):
        dst = os.path.join(root, __replace(repr(path).decode('unicode-escape')))
        if src != dst:
            os.rename(src, dst)
催眠师

问题出在此黑客中:

repr(path).decode('unicode-escape')

您不能确定在不同系统上的字节码编码,即使在具有不同系统编码的Windows或经过不同编译的Python(例如CygWin或PyWin)上也是如此。唯一确定的方法是通过listdir使用unicode路径(例如os.listdir(u'.')或)调用来获取unicode中的文件名列表os.listdir(root.decode('utf-8')):最好以unicode进行所有文件系统操作。

我什至编写了一个类似的简单程序,该程序可以在Python 2和Python 3中使用,而不会受到任何黑客攻击,它可以将树中的所有文件和目录重命名为ASCII。您的大多数替换操作(仅从字母中删除重音符号)可以通过以下方式完成:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章