我们经常的工作方式是在window下开发和调试代码,无误后发布到linux服务器上运行,这其中会遇到window和linux的差异的问题,其中之一就是目录分割符的问题,如果你在进行目录或文件的操作,你就有感受了,今天特地将python在这两个平台上处理做个测试,记录在此。

window平台上:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import os
>>> path = 'D:\My Works\wkq'
>>> os.chdir(path)
>>> os.getcwd()
'D:\\My Works\\wkq'
>>> os.listdir('D:\My Works\wkq')
['IMG_20120229_161456.jpg', 'IMG_20120229_161516.jpg', 'Thumbs.db']
>>> os.listdir('D:\\My Works\\wkq')
['IMG_20120229_161456.jpg', 'IMG_20120229_161516.jpg', 'Thumbs.db']
>>> os.listdir('D:/My Works/wkq')
['IMG_20120229_161456.jpg', 'IMG_20120229_161516.jpg', 'Thumbs.db']
>>> os.listdir('D:/My Works/wkq/')
['IMG_20120229_161456.jpg', 'IMG_20120229_161516.jpg', 'Thumbs.db']
>>> path = os.getcwd()
>>> path
'D:\\My Works\\wkq'
>>> os.listdir(path.replace('\\','/'))
['IMG_20120229_161456.jpg', 'IMG_20120229_161516.jpg', 'Thumbs.db']
>>>

可见在window平台上单反斜杠“\”双反斜杠“\\”和斜杠“/”均可正常运行,而且python默认处理window目录是双反斜杠“\\”。但是需要注意的是单反斜杠“\”是python中的转义符,因此不要使用为好。

再看下linux平台

>>> import os
>>> os.getcwd()
'/root'         ^
>>> os.listdir('/root')
['.bashrc', 'apps', 'nginx.sh', '.lesshst', '.python-eggs', 'lnmp', '.bash_aliases', '.ssh', '.cache', '.profile', '.viminfo', 'vhost.sh', '.aptitude', 'uwsgi.sh', '.bash_history']
>>> os.listdir('/root/')
['.bashrc', 'apps', 'nginx.sh', '.lesshst', '.python-eggs', 'lnmp', '.bash_aliases', '.ssh', '.cache', '.profile', '.viminfo', 'vhost.sh', '.aptitude', 'uwsgi.sh', '.bash_history']
>>> os.listdir('\root\')
  File "<stdin>", line 1
    os.listdir('\root\')
                       ^
SyntaxError: EOL while scanning string literal
>>> os.listdir('\root')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: '\root'
>>> os.listdir('\\root')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory: '\\root'
>>>

有以上测试可见,linux平台上只认为斜杠“/”是目录分割符,而且还认为反斜杠“\”是普通字符,如果你用了反斜杠作为目录分割符来创建目录时就分悲剧了。

总结在python中我们使用斜杠“/”作为目录分割符即可,而且为了兼容winsow平台的默认格式我们用replace('\\','/')来对目录字符串进行替换后再使用。