文档章节

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

Honghe
 Honghe
发布于 2013/03/01 16:24
字数 335
阅读 402
收藏 4

标题取的太大了,但只先记录一点,说明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表的顺序排列,避免出现莫名其妙的错误

© 著作权归作者所有

共有 人打赏支持
Honghe

Honghe

粉丝 56
博文 125
码字总数 35178
作品 3
福州
高级程序员
Python中os与sys两模块的区别

前言 os与sys模块的官方解释如下: os: This module provides a portable way of using operating system dependent functionality. 这个模块提供了一种方便的使用操作系统函数的方法。 sys:...

xiaoge2016
04/22
0
0
Python的设计理念和优缺点

  可扩充性可说是Python作为一种编程语言的特色。新的内置模块(module)可以用C 或C++写成。而我们也可为现成的模块加上Python的接口。Python可以使用户避免过分的语法的羁绊而将精力主要...

StreamWang
2010/04/21
0
1
Python操作小结(mysql、txt\json、crontab、http)

有段时间没有使用python了,对它的语法有点生疏,花了几个小时熟悉,期间发现很多小细节不清楚。为了下次能快速上手,避免重复犯错,我将python使用过程中的一些问题在这篇博文中记录小结一下...

lilugoodjob
07/02
0
0
【转载】关于python文件操作-很好的总结

总是记不住API。昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。 得到当前工作目录,即当前Pyt...

beijing_zbs
2015/10/30
0
0
D05——C语言基础学PYTHON

C语言基础学习PYTHON——基础学习D05 20180815内容纲要:     1 模块     2 包     3 import的本质     4 内置模块详解       (1)time&datetime       (2)d...

m1racle
08/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HTTP get、post 中请求json与map传参格式

import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;im......

寒风中的独狼
16分钟前
0
0
IDEA中tomcat启动慢 耗时10分钟

用idea中的tomcat以debug模式启动,会非常的慢,而正常启动没啥问题;原因是debug模式中View Breakpoints断点代码,断点的是jar包,而现在启动由于jar包发生变化,导致启动时一直处于等待中。...

GoodMarver
28分钟前
2
0
Linux学习-10月18(awk)

9.6/9.7 awk 一、awk简介   1. awk是一种编程语言,用于对文本和数据进行处理的   2. 具有强大的文本格式化能力   3. 利用命令awk,可以将一些文本整理成为我们想要的样子   4. 命令awk...

wxy丶
29分钟前
0
0
「ThinkPHP开发者周刊」第3期——官宣:5.1版本发布LTS版本

[ 本周读数 ] 70——还剩70天,PHP5.6年底不再提供支持 PHP5.6的安全支持将于2018年12月31日终止。即两个多月后,使用 PHP 5.6 版本的网站将不再收到安全漏洞或错误更新。 较新的 PHP7.0在今...

流年
37分钟前
1
0
Spring IOC 之 注册 BeanDefinition

获取 Document 对象后,会根据该对象和 Resource 资源对象调用 registerBeanDefinitions() 方法,开始注册 BeanDefinitions 首先调用 createBeanDefinitionDocumentReader() 方法实例化 Bean...

职业搬砖20年
42分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部