如何删除Python中的错误路径字符?

时间:2009-06-23 15:45:40

标签: python path

在Python中删除错误路径字符(例如Windows上的“\”或“:”)的最跨平台方法是什么?

解决方案

因为似乎没有理想的解决方案,所以我决定相对限制,并使用以下代码:

def remove(value, deletechars):
    for c in deletechars:
        value = value.replace(c,'')
    return value;

print remove(filename, '\/:*?"<>|')

4 个答案:

答案 0 :(得分:17)

我认为这里最安全的方法是更换任何可疑字符。所以,我认为你可以替换(或摆脱)任何不是字母数字, - ,_,空格或句号的东西。这就是你如何做到的:

import re
re.sub('[^\w\-_\. ]', '_', filename)

上述内容不包含任何字母,'_''-''.'或带有'_'的空格。所以,如果您正在查看整个路径,那么您也希望将os.sep放入已批准字符列表中。

以下是一些示例输出:

In [27]: re.sub('[^\w\-_\. ]', '_', 'some\\*-file._n\\\\ame')
Out[27]: 'some__-file._n__ame'

答案 1 :(得分:16)

不幸的是,可接受的字符集因文件系统的操作系统而异。

  • Windows

      
        
    • 使用当前代码页中的几乎任何字符作为名称,包括扩展字符集(128-255)中的Unicode字符和字符,但以下情况除外:      
          
      • 不允许使用以下保留字符:
          &LT; &GT; :“/ \ |?*
      •   
      • 不允许整数表示形式在0到31范围内的字符。
      •   
      • 目标文件系统不允许的任何其他字符。
      •   
    •   

    接受的字符列表可能会有所不同,具体取决于首先格式化文件系统的计算机的操作系统和区域设置。

    .NET有GetInvalidFileNameCharsGetInvalidPathChars,但我不知道如何从Python中调用它们。

  • Mac OS:NUL始终被排除,“/”被排除在POSIX层之外,“:”从Apple API中排除
    • HFS +:Unicode 2.0规范中UTF-16可表示的任何非排除字符序列
    • HFS:MacRoman(默认)或其他编码中可表示的任何非排除字符序列,具体取决于创建文件系统的计算机
    • UFS:与HFS +相同
  • Linux中:
    • native(类UNIX)文件系统:除NUL和“/”之外的任何字节序列
    • FAT,NTFS,其他非本机文件系统:各不相同

您最好的选择可能是在所有平台上过于保守,或者只是尝试创建文件名并处理错误。

答案 2 :(得分:1)

如果您正在使用python尝试os.path以避免路径的跨平台问题。

答案 3 :(得分:0)

该字符位于os.sep,它将是“\”或“:”,具体取决于您所使用的系统。