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