如何在python中检查平台不兼容的文件夹(文件)名称

时间:2011-07-19 09:36:03

标签: python windows validation filesystems cross-platform

我希望能够从python检查一个给定的字符串是否是一个有效的跨平台文件夹名称 - 下面是我遇到的具体问题(文件夹名称以。结尾),但我确定有一些更特殊的情况(例如:con等)。

这是否有图书馆?


从python(3.2)我在Windows(7)上创建了一个名称以dot('。')结尾的文件夹,例如(没有方括号):[我在假期做了什么,第二部分。]

当创建的文件夹是ftp'd(对linux,但我猜这是无关紧要的)时,它不再有点了(反过来,这打破了很多超链接)。

我已从命令行检查过,似乎该文件夹没有'。'在文件名中

mkdir tmp.
dir
cd tmp 
cd ..\tmp.

显然,忽略在文件夹名称末尾添加一个点,例如:

cd c:\Users.

按预期工作。

2 个答案:

答案 0 :(得分:2)

  

不要使用空格或句点结束文件或目录名称。虽然   底层文件系统可能支持这样的名称,即Windows shell   和用户界面没有。

http://msdn.microsoft.com/en-us/library/aa365247.aspx#naming_conventions

对于Windows,该页面也会为您提供有关其他非法名称的信息。包括你在说自己的CON。

如果您尊重那些(看似苛刻的)规则,我认为您在Linux和大多数其他系统上都是安全的。

答案 1 :(得分:2)

不幸的是,没有办法做到这一点。对于Windows,您基本上可以使用以下代码删除所有非法字符 - 但如果有人仍然有FAT文件系统,您也必须处理这些,因为这些更严格。基本上,您必须阅读所有文件系统的文档,并提供完整的列表。这是NTFS的起点:

ILLEGAL_NTFS_CHARS = "[<>:/\\|?*\"]|[\0-\31]"
def __removeIllegalChars(name):
    # removes characters that are invalid for NTFS
    return re.sub(ILLEGAL_NTFS_CHARS, "", name)

然后你需要一些“禁止”名单以摆脱COM。几乎是一个完整的混乱..而且它忽略了linux(虽然它非常放松了)