使用python重命名文件时出现问题,某些字符拒绝更改。(更改编码时可能出现问题)
我四处搜索过,但虽然我看到了一些类似的问题,但我没有获得足够的信息来解决我的问题 我的一位同事在Wordpress网站上工作,他们在查看一些图像时遇到问题(幻灯片上不会显示这些图像)。 没有显示的图像是那些名称为希腊语的图像,因此他们猜测这是一个命名问题。 所以我想我应该写一个脚本,把这些图像从希腊语改为希腊语(希腊语的一种形式,使用拉丁语字符,在互联网早期的希腊人中很流行,对于那些不熟悉这个词的人来说) 我用各种希腊字符测试了脚本,它工作得非常好,包括希腊语言特有的各种符号 当我在我想要重命名的图像上运行脚本时,一些图像显示了一个问题。他们会将一些重音字符重命名为法语重音字符(如άtoá等),但当我将它们添加到字典中时(我使用字典解析名称并替换希腊字母),他们拒绝更改 例如,在这个文件名“palaiá-póli-4-768x480”上,我运行了两次脚本:第一次将它从“παλαιά-πλλη-4-768x156”转换为上面的名称,第二次运行没有任何操作,即使在字符映射中添加了“a”:“a”和“o”:“o”(在asó和á之前不存在) 我的脚本如下:使用python重命名文件时出现问题,某些字符拒绝更改。(更改编码时可能出现问题),python,encoding,rename,filenames,Python,Encoding,Rename,Filenames,我四处搜索过,但虽然我看到了一些类似的问题,但我没有获得足够的信息来解决我的问题 我的一位同事在Wordpress网站上工作,他们在查看一些图像时遇到问题(幻灯片上不会显示这些图像)。 没有显示的图像是那些名称为希腊语的图像,因此他们猜测这是一个命名问题。 所以我想我应该写一个脚本,把这些图像从希腊语改为希腊语(希腊语的一种形式,使用拉丁语字符,在互联网早期的希腊人中很流行,对于那些不熟悉这个词的人来说) 我用各种希腊字符测试了脚本,它工作得非常好,包括希腊语言特有的各种符号 当我在我想要重命名
import os
char_migrate = {
"ς": 's',
'ε': 'e', 'ρ': 'r', "τ": "t", "υ": "y", "θ": "th", "ι": "i", "ο": "o", "π": "p", "α": "a",
"σ": "s", "δ": "d", "φ": "f", "γ": "g", "η": "i", "ξ": "x", "κ": "k", "λ": "l",
"ζ": "z", "χ": "x", "ψ": "ps", "ω": "o", "β": "v", "ν": "n", "μ": "m",
"Ε": "e", "Ρ": "r", "Τ": "t", "Υ": "y", "Θ": "th", "Ι": "i", "Ο": "o", "Π": "p", "Α": "a",
"Σ": "s", "Δ": "d", "Φ": "f", "Γ": "g", "Η": "i", "Ξ": "x", "Κ": "k",
"Λ": "l", "Ζ": "z", "Χ": "x", "Ψ": "ps", "Ω": "o", "Β": "v", "Ν": "n", "Μ": "m",
"Έ": "e", "Ά": "a", "Ύ": "y", "Ί": "i", "Ό": "o", "Ή": "i", "Ώ": "o",
"έ": "e", "ά": "a", "ύ": "y", "ί": "i", "ό": "ο", "ή": "i", "ώ": "o",
"ϋ": "i", "ϊ": "i", "ΐ": "i", "ΰ": "i",
"Ϊ": "i", "Ϋ": "i"
}
os.chdir('C:/Users/alift/Desktop/RenameTestFolder')
for f in os.listdir():
name = f
new_name = ""
for l in name:
if l in char_migrate:
b = char_migrate[l]
new_name += b
else:
new_name += l
os.rename(f, new_name)
到目前为止,我尝试的是在os.rename中的新名称上添加.encode(encoding=“xxx”),尝试Unicode、UTF-8和Ansi(只有UTF-8使我的脚本运行时没有错误,但我了解到这是python使用的默认编码,我没有得到任何结果)
最后,我的问题可能只是我需要批量更改编码,而不是像我那样批量更改名称,但我不知道怎么做
有什么建议或见解吗?
谢谢你抽出时间 我认为它可以是windows的东西,因为我在linux/Python3下运行了您的脚本,它工作得非常完美
Input file:
Παλαιά-Πόλη-4-768x156.txt
Output file:
palaia-pοli-4-768x156.txt
注意unicode中的重音字符可能是一场噩梦,因为它们中的大多数以两种不同的形式存在:组合和分解。例如,拉丁文
是拉丁文小写字母A,带有严重的U+00E0。但它可以是'\u0061\u0300'
,拉丁文小写字母A后跟组合的严肃口音。unicodedata
模块提供了normalize
函数来转换为这些表单中的任何一种。区分它们的唯一方法是转储它们的hexa代码,但它们在每个Python字符串相等运算符中并不相等
因此,当出现问题并涉及重音字符时:
转储十六进制代码以更好地了解引擎盖下发生的情况
使用规范化形式来限制消歧问题
>>> print hex(ord(normalize('NKFC', '\u0061\u0300')))
0x6e
嗯,我不认为它真的可以被复制。当我复制名称并命名自己的文件时,效果很好。当我使用原始文件时,我才遇到问题。不过,我会尝试在我的linux机器上打开相同的文件,看看它是如何工作的,因为我还没有在那里尝试过!伟大的谢谢!我已经添加了我在这里找到的组合字符:到字符映射中,并将它们映射到一个空字符串,它就像一个符咒一样工作:)