python pitfall (陷阱)--不同平台os模块文件名排序
博客专区 > Honghe 的博客 > 博客详情
python pitfall (陷阱)--不同平台os模块文件名排序
Honghe 发表于5年前
python pitfall (陷阱)--不同平台os模块文件名排序
  • 发表于 5年前
  • 阅读 392
  • 收藏 4
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

标题取的太大了,但只先记录一点,说明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
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
Honghe
粉丝 56
博文 125
码字总数 35178
作品 3
×
Honghe
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: