python pitfall (陷阱)--不一樣平臺os模塊文件名排序

標題取的太大了,但只先記錄一點,說明python os模塊在不一樣平臺下不一樣的行爲。可能之後會添加,主要爲拋磚引玉...
環境: python

  • windows 7 english 32bit
  • Ubuntu 12.04 32bit
  • python 2.7.3
win32與linux中,運行列出文件命令(dir, ls), 默認對文件名的排序是先數字後字母。因win32大小寫不區別,因此字母的排序就沒什麼好說了。linux下,字母的序列並無按ascii表的序列,而是同一個字母的大小寫排在一塊兒,大寫字母緊跟在小寫字母以後。 但python的os模塊對兩個平臺處理結果卻不同。取如下6個文件名作測試,文件名與代碼以下:

12ab  Abc  Eab  a1bc  acd  bc
for root, dirs, files in os.walk(os.getcwd()):
    print files
上面代碼在win32平臺下的結果是:

['12ab', 'a1bc', 'Abc', 'acd', 'bc', 'Eab']
同一代碼,在Linux平臺下的結果倒是:
['Eab', 'acd', 'a1bc', '12ab', 'bc', 'Abc' ]

因此,在linux平臺下的輸出結果看不出有什麼規律,最好的辦法是,統一對代碼增長排序: linux

for root, dirs, files in os.walk(os.getcwd()):
    print sortd(files)
['12ab', 'Abc', 'Eab', 'a1bc', 'acd', 'bc']

這樣,嚴格按照ascii表的順序排列,避免出現莫名其妙的錯誤 shell

相關文章
相關標籤/搜索