跟老齐学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抓取模板之家的CSS模板
Mar 16 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
Python pickle模块用法实例分析
May 27 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
python通过文件头判断文件类型
Oct 30 Python
python3中dict(字典)的使用方法示例
Mar 22 Python
使用python实现个性化词云的方法
Jun 16 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
对python中的iter()函数与next()函数详解
Oct 18 Python
使用python opencv对目录下图片进行去重的方法
Jan 12 Python
Tensorflow模型实现预测或识别单张图片
Jul 19 Python
基于Python中的yield表达式介绍
Nov 19 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
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP闭包函数详解
2016/02/13 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
javascript判断机器是否联网的2种方法
2013/08/09 Javascript
javascript 拷贝节点cloneNode()使用介绍
2014/04/03 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
FullCalendar日历插件应用之数据展现(一)
2015/12/23 Javascript
Bootstrap开发实战之第一次接触Bootstrap
2016/06/02 Javascript
轮播的简单实现方法
2016/07/28 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
python实现udp聊天窗口
2020/03/31 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
2020/08/07 Python
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
男方父母证婚词
2014/01/12 职场文书
工商局副局长个人对照检查材料
2014/09/25 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
2014年个人售房协议书
2014/10/30 职场文书
给领导的感谢信范文
2015/01/23 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
Mysql 如何查询时间段交集
2021/06/08 MySQL