【发布时间】:2019-10-04 01:42:55
【问题描述】:
我想借助 python 中的“映射列表”来规范化文件名。
例如,我有一些像这样命名的文件:
Abb. 1 - Streßfaktor ìmpersóna.jpg
Abb. 2 - Änderungsverlauf.jpg
Abb. 3 — Senôjarîolé.jpg
我的目标是得到这个:
Abb_1_Stressfaktor_impersona.jpg
Abb_2_Aenderungsverlauf.jpg
Abb_3_Senojariole.jpg
规则很简单,可以用正则表达式存储在“映射列表”中:
"\s+|.|,|;|-|–|—" : "_"
"ß" : "ss"
"ä" : "ae"
"ü" : "ue"
"ö" : "oe"
"á|â|à|ā|ă|ą|ã|å" : "a"
"í|í|ì|ï|ĩ|ī|ĭ|į|ǐ" : "i"
"_+" : "_"
所以: 之前是正则表达式中的搜索字符串,: 之后是替换字符串。
我已经试过了:
import os
current_path = os.getcwd()
print('Current path: %s' %current_path)
filenames = os.listdir(current_path)
for filenamen in filnames:
os.rename(filename, filename.replace(" ", "_"))
os.rename(filename, filename.replace(".", "_"))
os.rename(filename, filename.replace(",", "_"))
os.rename(filename, filename.replace(";", "_"))
os.rename(filename, filename.replace("-", "_"))
os.rename(filename, filename.replace("–", "_"))
os.rename(filename, filename.replace("—", "_"))
os.rename(filename, filename.replace("ß", "ss"))
os.rename(filename, filename.replace("ä", "ae"))
os.rename(filename, filename.replace("ü", "ue"))
os.rename(filename, filename.replace("ö", "o"))
os.rename(filename, filename.replace("á", "a"))
os.rename(filename, filename.replace("â", "a"))
os.rename(filename, filename.replace("à", "a"))
…
但是这段代码的问题是,一旦第一次替换,我得到 FileNotFoundError,这是合乎逻辑的:文件名已更改,因此“原始”文件没有已经存在了。
我已经用“映射列表”搜索了一个解决方案,但我没有找到任何方便实现给定目标的方法。
有人知道如何解决这个问题吗?
【问题讨论】:
标签: python mapping filenames normalization