python pitfall (陷阱)--不同平台os模块文件名排序

标题取的太大了,但只先记录一点,说明python os模块在不同平台下不同的行为。可能以后会添加,主要为抛砖引玉...
环境:

  • 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平台下的输出结果看不出有什么规律,最好的办法是,统一对代码增加排序:

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

这样,严格按照ascii表的顺序排列,避免出现莫名其妙的错误

你可能感兴趣的:(python)