跟老齐学Python之折腾一下目录


Posted in Python onOctober 24, 2014

python在安装的时候,就自带了很多模块,我们把这些模块称之为标准库,其中,有一个是使用频率比较高的,就是 os 。这个库中方法和属性众多,有兴趣的看官可以参考官方文档:https://docs.python.org/2/library/os.html,或者在交互模式中,用dir(os)看一看。

>>> import os   #这个动作很重要,不能缺少

>>> dir(os)

['EX_CANTCREAT', 'EX_CONFIG', 'EX_DATAERR', 'EX_IOERR', 'EX_NOHOST', 'EX_NOINPUT', 'EX_NOPERM', 'EX_NOUSER', 'EX_OK', 'EX_OSERR', 'EX_OSFILE', 'EX_PROTOCOL', 'EX_SOFTWARE', 'EX_TEMPFAIL', 'EX_UNAVAILABLE', 'EX_USAGE', 'F_OK', 'NGROUPS_MAX', 'O_APPEND', 'O_ASYNC', 'O_CREAT', 'O_DIRECT', 'O_DIRECTORY', 'O_DSYNC', 'O_EXCL', 'O_LARGEFILE', 'O_NDELAY', 'O_NOATIME', 'O_NOCTTY', 'O_NOFOLLOW', 'O_NONBLOCK', 'O_RDONLY', 'O_RDWR', 'O_RSYNC', 'O_SYNC', 'O_TRUNC', 'O_WRONLY', 'P_NOWAIT', 'P_NOWAITO', 'P_WAIT', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'UserDict', 'WCONTINUED', 'WCOREDUMP', 'WEXITSTATUS', 'WIFCONTINUED', 'WIFEXITED', 'WIFSIGNALED', 'WIFSTOPPED', 'WNOHANG', 'WSTOPSIG', 'WTERMSIG', 'WUNTRACED', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_copy_reg', '_execvpe', '_exists', '_exit', '_get_exports_list', '_make_stat_result', '_make_statvfs_result', '_pickle_stat_result', '_pickle_statvfs_result', '_spawnvef', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'chown', 'chroot', 'close', 'closerange', 'confstr', 'confstr_names', 'ctermid', 'curdir', 'defpath', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fchdir', 'fchmod', 'fchown', 'fdatasync', 'fdopen', 'fork', 'forkpty', 'fpathconf', 'fstat', 'fstatvfs', 'fsync', 'ftruncate', 'getcwd', 'getcwdu', 'getegid', 'getenv', 'geteuid', 'getgid', 'getgroups', 'getloadavg', 'getlogin', 'getpgid', 'getpgrp', 'getpid', 'getppid', 'getresgid', 'getresuid', 'getsid', 'getuid', 'initgroups', 'isatty', 'kill', 'killpg', 'lchown', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'major', 'makedev', 'makedirs', 'minor', 'mkdir', 'mkfifo', 'mknod', 'name', 'nice', 'open', 'openpty', 'pardir', 'path', 'pathconf', 'pathconf_names', 'pathsep', 'pipe', 'popen', 'popen2', 'popen3', 'popen4', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'rmdir', 'sep', 'setegid', 'seteuid', 'setgid', 'setgroups', 'setpgid', 'setpgrp', 'setregid', 'setresgid', 'setresuid', 'setreuid', 'setsid', 'setuid', 'spawnl', 'spawnle', 'spawnlp', 'spawnlpe', 'spawnv', 'spawnve', 'spawnvp', 'spawnvpe', 'stat', 'stat_float_times', 'stat_result', 'statvfs', 'statvfs_result', 'strerror', 'symlink', 'sys', 'sysconf', 'sysconf_names', 'system', 'tcgetpgrp', 'tcsetpgrp', 'tempnam', 'times', 'tmpfile', 'tmpnam', 'ttyname', 'umask', 'uname', 'unlink', 'unsetenv', 'urandom', 'utime', 'wait', 'wait3', 'wait4', 'waitpid', 'walk', 'write']

在这么多的东西中,本讲只关注os.path,真所谓“弱水三千,只取一瓢”,为什么这么偏爱它呢?因为它和前面已经讲过的文件操作进行配合,就能够随心所欲操作各个地方的文件了(关于文件,请参考:不要红头文件(1)、不要红头文件(2))

关于os.path的属性也不少,依然可以用dir(os.path)查看:

>>> dir(os.path)

['__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_joinrealpath', '_unicode', '_varprog', 'abspath', 'altsep', 'basename', 'commonprefix', 'curdir', 'defpath', 'devnull', 'dirname', 'exists', 'expanduser', 'expandvars', 'extsep', 'genericpath', 'getatime', 'getctime', 'getmtime', 'getsize', 'isabs', 'isdir', 'isfile', 'islink', 'ismount', 'join', 'lexists', 'normcase', 'normpath', 'os', 'pardir', 'pathsep', 'realpath', 'relpath', 'samefile', 'sameopenfile', 'samestat', 'sep', 'split', 'splitdrive', 'splitext', 'stat', 'supports_unicode_filenames', 'sys', 'walk', 'warnings']

这么多属性,看官可以用help()逐个查看有关信息,并了解其使用方法。下面列出常见的几个使用方法,为看官减轻一点阅读英文的障碍,不过,如果看官英语足够好,请直接看原文档。就像这样:

>>> help(os.path.split)
split(p)

    Split a pathname.  Returns tuple "(head, tail)" where "tail" is

    everything after the final slash.  Either part may be empty.

以下将一些典型举例说明:

特别说明,下面的所有操作,均是进入到如下的目录中进行的。

qw@qw-Latitude-E4300:~/Documents/ITArticles/BasicPython/codes$ pwd

/home/qw/Documents/ITArticles/BasicPython/codes         #当前目录
qw@qw-Latitude-E4300:~/Documents/ITArticles/BasicPython/codes$ python
Python 2.7.6 (default, Nov 13 2013, 19:24:16) 

[GCC 4.6.3] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>>

文件的绝对路径

>>> import os.path

>>> os.path.abspath("225.py")

'/home/qw/Documents/ITArticles/BasicPython/codes/225.py'

文件 225.py 是真实存在上述路径中的,得到了该文件的绝对路径。但是,如果随便提供一个不在这个目录中的文件,又如何?

>>> os.path.isfile("225.py")

True
>>> os.path.isfile("2222.py")

False

>>> os.path.abspath("2222.py")

'/home/qw/Documents/ITArticles/BasicPython/codes/2222.py'

os.path.isfile(path),可以判断path中是否是文件,其实是判断在该路径中,是否存在那个文件,如果存在则返回True,否则False。上面的操作发现 2222.py 这个文件在当前目录下是不存在的,但是,用os.path.abspaht("2222.py")能够返回一个绝对路径并带有这个不存在的文件的文件名。这里不妨理解为,如果要建立这个文件,它即将被放在那个位置。

按照这样理解,还可:

>>> os.path.abspath("/home/qw/kkkkkkkk.kk")

'/home/qw/kkkkkkkk.kk'

分开目录和文件名

>>> pn = os.path.abspath("225.py")

>>> pn

'/home/qw/Documents/ITArticles/BasicPython/codes/225.py'
>>> os.path.split(pn)

('/home/qw/Documents/ITArticles/BasicPython/codes', '225.py')

>>> path, filename = os.path.split(pn)[0], os.path.split(pn)[1]

>>> path

'/home/qw/Documents/ITArticles/BasicPython/codes'

>>> filename

'225.py'

os.paht.split(),参数是目录加文件名,就可以将路径和文件名分开。其实,我看这个功能不是很智能,你看这样

>>> os.path.split("/home/qw")

('/home', 'qw')
>>> os.path.split("/home/qw/")

('/home/qw', '')

它就是将最后一组认为是文件名了,即最后一个/后面的就是文件名,所以第二个实验中,文件名是空了。是不是有点傻呢?

同样,参数中的文件或者目录,不一定是你的电脑中真实存在的,请看:

>>> os.path.split("/foo/python/qiwsir/git.git")

('/foo/python/qiwsir', 'git.git')

只要符合目录书写结构,就可以分解了。

有另外两个属性,是os.path.split()的分别执行,即可以分别获得路径和文件名,这样让操作更简单了。

>>> os.path.dirname("/foo/python/qiwsir/git.git")

'/foo/python/qiwsir'

>>> os.path.basename("foo/python/qiwsir/git.git")

'git.git'

判断

前面稍微提到了os.path.isfile()可以用来判断一个文件是否存在,那么判断目录路径是否存在,可否?可:

>>> os.path.exists("/foo/python/qiwsir")  

False

>>> os.path.exists("/home/qw/Documents")

True

判断相关的属性还有:

os.path.isabs(path):判断path是否为绝对路径
os.paht.isdir(path):判断path是否为存在的目录
组合路径

将两个或多个对象组合起来,是常见的事情,那么如何将多个路径组合呢?如下:

>>> os.path.join("/home/python","/BasicsPython","226.md")

'/BasicsPython/226.md'

特别提醒,这个属性的返回值中,将第一个绝对路径忽略。

>>> os.path.join("/","/home/qw","learnpython.md")

'/home/qw/learnpython.md'

Python 相关文章推荐
python self,cls,decorator的理解
Jul 13 Python
python通过pil模块获得图片exif信息的方法
Mar 16 Python
解决Pycharm无法import自己安装的第三方module问题
May 18 Python
python3.4控制用户输入与输出的方法
Oct 17 Python
python面向对象实现名片管理系统文件版
Apr 26 Python
python腾讯语音合成实现过程解析
Aug 01 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
Aug 19 Python
python3常用的数据清洗方法(小结)
Oct 31 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
Dec 19 Python
Python 定义只读属性的实现方式
Mar 05 Python
python 19个值得学习的编程技巧
Aug 15 Python
跟老齐学Python之私有函数和专有方法
Oct 24 #Python
跟老齐学Python之模块的加载
Oct 24 #Python
python和shell实现的校验IP地址合法性脚本分享
Oct 23 #Python
探寻python多线程ctrl+c退出问题解决方案
Oct 23 #Python
纯Python开发的nosql数据库CodernityDB介绍和使用实例
Oct 23 #Python
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
Oct 23 #Python
使用Python开发windows GUI程序入门实例
Oct 23 #Python
You might like
单位速度在实战中的运用
2020/03/04 星际争霸
PHP Switch 语句之学习笔记
2013/09/21 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
PHP7匿名类的用法示例
2019/04/05 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
2020/01/26 PHP
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
Element Dropdown下拉菜单的使用方法
2020/07/26 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
python timestamp和datetime之间转换详解
2017/12/11 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
深入理解python中sort()与sorted()的区别
2018/08/29 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
2019/06/24 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
final, finally, finalize的区别
2012/03/01 面试题
学习党课思想汇报
2013/12/29 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
2015新学期家长寄语
2015/02/26 职场文书
2015年街道办事处工作总结
2015/05/22 职场文书
市场营销计划书
2019/04/24 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏