资讯专栏INFORMATION COLUMN

[零基础学python]折腾一下目录

Crazy_Coder / 3343人阅读

摘要:就像这样以下将一些典型举例说明特别说明,下面的所有操作,均是进入到如下的目录中进行的。上面的操作发现这个文件在当前目录下是不存在的,但是,用能够返回一个绝对路径并带有这个不存在的文件的文件名。返回首页上一讲私有和专有

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"

返回首页 | 上一讲:私有和专有

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37405.html

相关文章

  • [基础python]一个免费的实验室

    摘要:在学生时代,就羡慕实验室,老师在里面可以鼓捣各种有意思的东西。再后来,终于发现原来计算机是一个最好的实验室。通过实验,研究清楚了,才能在编程实践中使用。其实,这就是一个非常好的实验室。 在学生时代,就羡慕实验室,老师在里面可以鼓捣各种有意思的东西。上大学的时候,终于有机会在实验室做大量实验了,因为我是物理系,并且,遇到了一位非常令我尊敬的老师——高老师,让我在他的实验室里面,把所有已经...

    soasme 评论0 收藏0
  • 30岁基础编程,先哪种语言最好?

    摘要:大学,光学工程研究生毕业,和程序猿完全不搭边。那怎么办,试着学一学呗,学习才是程序猿的天性。所以我在想程序猿是不是都需要新知识刺激一下,才能保持兴奋的头脑。有句话说的很对程序猿就像好奇的猫,追着毛球的线头玩,最后一个毛球在脑袋里搅浆糊。 说说我自己的经历。211大学,光学工程研究生毕业,和程序猿完全不搭边。 毕业后进了成都某国字头研究所,在行业里摸爬滚打了四年,2018年机缘巧合在家养...

    xietao3 评论0 收藏0
  • [基础Python]已经过去的数据类型总结

    摘要:前面已经洋洋洒洒地介绍了不少数据类型。所有的数据类型,就是一种对象。可以在交互模式下这样查看显示应该是这样的注意看上面乱七八糟的英文中,是不是有符号,这是什么前面在讲述字符串的时候提到了转义符号,这是换一行。 前面已经洋洋洒洒地介绍了不少数据类型。不能再不顾一切地向前冲了,应当总结一下。这样让看官能够从总体上对这些数据类型有所了解,如果能够有一览众山小的感觉,就太好了。 下面的表格中...

    voidking 评论0 收藏0
  • 我是如何基础转行人工智能的(附十问十答)

    摘要:我的决定是学人工智能,当时对这个比较感兴趣。从机器学习学到深度学习再学回机器学习。面试,成功地去公司从事机器学习深度学习方面的基础工作。这个系列不仅仅以学习为目的,目的是为了达到机器学习的工作入门标准。 每个字都是经验所得,都是站在一个零基础的人的角度写的,纯手打+网上优秀资源整合,希望大家能每个字都认真看。 接下来文章会侧重在以下几方面 1、零基础如何进行人工智能的自学(以找工作为目...

    IamDLY 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<