在Python中删除错误路径字符(例如Windows上的"\"或":")的最跨平台方法是什么?
因为似乎没有理想的解决方案,我决定相对限制,并使用以下代码:
def remove(value, deletechars):
for c in deletechars:
value = value.replace(c,'')
return value;
print remove(filename, '\/:*?"<>|')
Run Code Online (Sandbox Code Playgroud)
Jos*_*osh 19
我认为这里最安全的方法就是替换任何可疑字符.所以,我认为你可以替换(或摆脱)任何不是字母数字, - ,_,空格或句号的东西.这是你如何做到这一点:
import re
re.sub('[^\w\-_\. ]', '_', filename)
Run Code Online (Sandbox Code Playgroud)
上述逃脱的每一个字符,这不是一个字母,'_','-','.'或与空间'_'.因此,如果您正在查看整个路径,则还需要将os.sep放入已批准字符列表中.
这是一些示例输出:
In [27]: re.sub('[^\w\-_\. ]', '_', 'some\\*-file._n\\\\ame')
Out[27]: 'some__-file._n__ame'
Run Code Online (Sandbox Code Playgroud)
eph*_*ent 17
不幸的是,可接受的字符集因操作系统和文件系统而异.
- 使用当前代码页中的几乎任何字符作为名称,包括扩展字符集(128-255)中的Unicode字符和字符,但以下情况除外:
- 不允许使用以下保留字符:
<>:"/\|?*- 不允许整数表示在0到31范围内的字符.
- 目标文件系统不允许的任何其他字符.
接受的字符列表可能会有所不同,具体取决于首先格式化文件系统的计算机的操作系统和区域设置.
.NET有GetInvalidFileNameChars和GetInvalidPathChars,但我不知道如何从Python调用它们.
您最好的选择可能是在所有平台上过于保守,或者只是尝试创建文件名并处理错误.