我想从文件名中删除所有标点符号,但保持其文件扩展名不变。
e.g。我想要:
Flowers.Rose-Murree-[25.10.11].jpg
Time.Square.New-York-[20.7.09].png
看起来像:
Flowers Rose Muree 25 10 11.jpg
Time Square New York 20 7 09.png
我正在尝试python:
re.sub(r'[^A-Za-z0-9]', ' ', filename)
但这会产生:
Flowers Rose Muree 25 10 11 jpg 时代广场纽约20 7 09 png
如何删除标点符号但保留文件扩展名?
答案 0 :(得分:7)
只有一种正确的方法可以做到这一点:
os.path.splitext
获取文件名和扩展名答案 1 :(得分:1)
我建议您使用空格[\W_](?=.*\.)
替换每个。
答案 2 :(得分:1)
看看这是否适合您。没有正则表达式,你实际上可以做到这一点
>>> fname="Flowers.Rose-Murree-[25.10.11].jpg"
>>> name,ext=os.path.splitext(fname)
>>> name = name.translate(None,string.punctuation)
>>> name += ext
>>> name
'FlowersRoseMurree251011.jpg'
>>>
答案 3 :(得分:0)
你可以使用负向前瞻,断言你没有处理一个只跟着数字和字母的点:
re.sub(r'(?!\.[A-Za-z0-9]*$)[^A-Za-z0-9]', ' ', filename)
答案 4 :(得分:0)
@katrielalex打败了我的答案类型,但无论如何,一个无正则表达式的解决方案:
In [23]: f = "/etc/path/fred.apple.png"
In [24]: path, filename = os.path.split(f)
In [25]: main, suffix = os.path.splitext(filename)
In [26]: newname = os.path.join(path,''.join(c if c.isalnum() else ' ' for c in main) + suffix)
In [27]: newname
Out[27]: '/etc/path/fred apple.png'