2011-07-19 51 views
2

我希望能夠從python檢查給定的字符串是否可以是一個有效的跨平臺文件夾名稱 - 下面是我遇到的具體問題(文件夾名稱以。結尾),但我確定有一些更特殊的情況(例如:con等)。如何檢查python平臺不兼容的文件夾(文件)名稱

有沒有這方面的圖書館? (3.2)我在Windows(7)上創建了一個名稱以dot('。')結尾的文件夾,例如, (沒有方括號):[我在假期做了什麼,第二部分]

當創建的文件夾是ftp'd(對於linux,但我猜這是不相關的),它沒有點它已經(並且作爲回報,這打破了很多超鏈接)。

我已經從命令行檢查過它,並且似乎該文件夾沒有'。'在文件名

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

顯然,在文件夾名稱的末尾添加一個點被忽略,例如:

cd c:\Users. 

作品一樣的預期。

+1

那麼,你可以節省自己的麻煩,並儘可能簡單的文件夾名稱,無論平臺。 –

+0

你試過這個'mkdir「tmp嗎?也許 」。」必須在Windows命令提示符下有特殊含義 –

+0

@Cat Plus Plus - 在具體示例中,文件夾名稱是用戶輸入驅動的。我的問題更多地是關於一般情況,即:給定一個字符串,確定它是否可以是有效的文件夾名稱。是的,解決方法是可能的,我已經應用了,但我正在尋找一個限制性較小的解決方案 – zsepi

回答

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(雖然那裏是非常輕鬆afaik)

2

不要使用空格或句點結束文件或目錄名稱。雖然 底層文件系統可能支持這些名稱,但Windows shell 和用戶界面不支持。

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

該頁面會給你其他非法名稱的信息也適用於Windows是。包括CON,如你所說的你自己。

如果你尊重那些(看似苛刻的)規則,我認爲你在Linux和大多數其他系統上也是安全的。

相關問題