跟老齐学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利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
python协程用法实例分析
Jun 04 Python
Python字符串处理实例详解
May 18 Python
python paramiko模块学习分享
Aug 23 Python
Python 最大概率法进行汉语切分的方法
Dec 14 Python
pytorch自定义初始化权重的方法
Aug 17 Python
Python 实现Image和Ndarray互相转换
Feb 19 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
opencv检测动态物体的实现
Jul 21 Python
Python必备技巧之字符数据操作详解
Mar 23 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使用json_encode对变量json编码
2014/04/07 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
PHP读取汉字的点阵数据
2015/06/22 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
php实现简单爬虫的开发
2016/03/28 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
PHP中PCRE正则解析代码详解
2019/04/26 PHP
js自带函数备忘 数组
2006/12/29 Javascript
jquery 表单进行客户端验证demo
2009/08/24 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
2009/09/08 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
基于Angularjs实现分页功能
2016/05/30 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
Python中的zipfile模块使用详解
2015/06/25 Python
python通过文件头判断文件类型
2015/10/30 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
python3下载抖音视频的完整代码
2019/06/05 Python
python实现日志按天分割
2019/07/22 Python
全网最全python库selenium自动化使用详细教程
2021/01/12 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
蒂芙尼澳大利亚官方网站:Tiffany&Co. Australia
2017/08/27 全球购物
小学六年级学生评语
2014/04/22 职场文书
机关作风建设心得体会
2014/10/22 职场文书
评先进个人材料
2014/12/29 职场文书
酒店前台岗位职责
2015/04/16 职场文书
感动中国何玥观后感
2015/06/02 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
MySQL优化及索引解析
2022/03/17 MySQL
PyTorch中的torch.cat简单介绍
2022/03/17 Python