如何在Python中删除错误的路径字符?
在Python中删除错误路径字符(例如Windows上的“ \”或“:”)的最跨平台方法是什么?
解
因为似乎没有理想的解决方案,所以我决定采用相对严格的限制,并使用了以下代码:
def remove(value, deletechars):
for c in deletechars:
value = value.replace(c,'')
return value;
print remove(filename, '\/:*?"<>|')
-
不幸的是,可接受的字符集因操作系统 和 文件系统而异。
* 当前代码页中的几乎所有字符都用作名称,包括Unicode字符和扩展字符集(128–255)中的字符,但以下各项除外: * 不允许使用以下保留字符:
<>:“ / / |?*
* 不允许使用整数表示形式(介于0到31之间)的字符。
* 目标文件系统不允许的任何其他字符。接受的字符列表可能会有所不同,具体取决于首先格式化文件系统的计算机的操作系统和语言环境。
.NET具有GetInvalidFileNameChars和GetInvalidPathChars,但是我不知道如何从Python调用它们。
- Mac OS:始终排除NUL,POSIX层排除“ /”,Apple API排除“:”
- HFS +:Unicode 2.0规范中UTF-16可以表示的任何非排除字符序列
- HFS:可以用MacRoman(默认)或其他编码表示的任何非排除字符序列,具体取决于创建文件系统的机器
- UFS:与HFS +相同
- Linux:
- 本机(类似UNIX的)文件系统:任何字节序列(不包括NUL和“ /”)
- FAT,NTFS,其他非本机文件系统:不同
最好的选择可能是在所有平台上都过于保守,或者只是尝试创建文件名并处理错误。
- Mac OS:始终排除NUL,POSIX层排除“ /”,Apple API排除“:”