zoukankan      html  css  js  c++  java
  • Python系统模块os



    os模块是直接和系统调用或者说系统提供的api打交道的模块,因此可以把它的功能分为3大类,分别是:

    1. POSIX工具,即处理文件系统相关的功能

    2. 提供跨平台能力的功能或函数

    3. 运行系统命令相关的函数

    下面我们来一一看这些功能常用的函数有哪些。

     

    ## 1. 文件系统处理相关函数

    一般在做文件或目录操作的时候,最常用的基本都是增删改查,os模块提供了对应的函数如下:

    • - os.remove() 删除文件
    • - os.rename() 重命名文件或目录
    • - os.mkdir() / os.makedirs() 创建单个目录 / 创建多级目录
    • - os.rmdir() / os.removedirs() 删除空目录 / 删除多级空目录
    • - os.copy('_dir', 'newfile') 复制文件或目录到新的目录中,
    • - os.listdir() 显示当前目录下的文件或目录,如果参数是路径,那么显示这个路径下的文件。
    • - os.chdir('/path/to/new/dir') 切换当前工作目录到新的工作目录

    在上面的代码中我们可以看到,os模块提供了对文件的修改、删除和查询方法,对目录提供了创建、删除、修改和删除的方法。但是没有创建文件的方法,这是为什么呢?因为在python中,创建文件一般是通过Python提供的通用open方法来实现的。os.open这个方法有,但是只能打开已有的文件,在文件不存在时会报错,而不会自动去创建这个文件。

    来看一下几个示例

    # 创建文件
    >>> f = open('test.txt', 'w')
    >>> f.close()
    >>> os.listdir()
    ['test.txt']
    
    # 创建目录和多级目录
    >>> os.mkdir('t1')
    >>> os.makedirs('t1/t2/t3')
    >>> 
    >>> os.listdir()
    ['test.txt', 't1']
    >>> os.listdir('t1')
    ['t2']
    >>> os.listdir('t1/t2')
    ['t3']
    
    # 重命名文件
    >>> os.rename('test.txt', 'test_rename_func.txt')
    >>> os.listdir()
    ['t1', 'test_rename_func.txt']
    
    # 重命名目录
    >>> os.rename('t1', 'test1')
    >>> os.listdir()
    ['test_rename_func.txt', 'test1']
    
    # 删除文件
    >>> os.remove('test_rename_func.txt')
    >>> os.listdir()
    ['test1']
    
    # 删除目录,此时test1为非空目录,报错。
    >>> os.rmdir('test1')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    OSError: [Errno 39] Directory not empty: 'test1'
    
    # 迭代删除多个空目录,此时要出给出多个目录完整路径
    >>> os.removedirs('test1/t2/t3')
    >>> os.listdir()
    []

    在上面的示例中,我们演示了os模块中用来增删改查文件和目录的相关函数,最后留下一个小问题,非空的目录该怎么删除呢?感兴趣的同学可以尝试以下,我们明天来答疑解惑。

     

    ## 2. 提供跨平台能力的功能或函数

    提到跨平台,可能我们最常遇到的就是两个东西,一个是换行符,一个是路径分隔符。

    在windows系统中,换行符是 ,而Linux和Unix中,换行符是 。在windows中,路径分隔符是反斜杠 ,例如windows系统下的路径一般是"C:windowssystem32",而Linux和Unix中,路径分隔符是斜杆 / 。如果你写的程序在多个平台上都可以正常运行,一般会怎么做呢?

    看了我们昨天关于sys模块的同学可能记得,sys模块有一个platform函数,可以输出系统版本,那么这个时候就可以根据它的值,来选择对应的换行符和路径分隔符。但是因为需要自己来判断,还是略微有些麻烦。

    作为一个程序员,当然是要把麻烦的事情简单化,os就提供了若干个这样的跨平台属性,如下所示:

    • - os.sep 根据系统类型输出对应的路径分隔符
    • - os.linesep 根据系统类型自动输出对应的换行符
    • - os.pathsep 系统中用来分隔环境变量路径的符号
    • - os.path.join() 用于拼接路径,并根据系统类型自动返回对应路径分隔符分隔的路径;
    • - os.path.split() 用于切割路径,根据系统类型自动选择对应的分隔符来分割;

    我们来看一下这几个函数的应用示例

    # windows系统对应操作符
    >>> os.sep, os.linesep, os.pathsep
    ('\', '
    ', ';')
    
    # 切割windows路径和拼接windows路径
    >>> os.path.split('c:windowssystem32')
    ('c:\windows', 'system32')
    >>>
    >>> os.path.join('c:windows', 'system32')
    'c:\windows\system32'
    
    # Linux系统对应操作符
    >>> os.sep, os.linesep, os.pathsep
    ('/', '
    ', ':')
    
    # 切割linux路径和拼接Linux路径
    >>> os.path.split('/root/project/module.py')
    ('/root/project', 'module.py')
    >>> 
    >>> os.path.join('/root/project', 'module.py')
    '/root/project/module.py'

     

    ## 3. 运行系统命令相关的函数

    在文章的最开始,我们说,os是一个很底层的模块,它会和系统提供的API或者系统调用进行交互。也就是说它可以用来对系统进行管理。它是怎么做到的呢?os提供了一些函数,可以让你直接调用系统提供的命令,相当于是你直接来操作系统一样。如下所示:

    • - os.system() 在python脚本中运行shell命令
    • - os.popen() 运行shell命令并与其输入流或输出流相连接,也就是说可以给shell命令提供输入参数或者获取它的命令执行结果

    下面我们来看一下这两个函数的用法:

    示例1. os.system运行系统命令

    >>> result = os.system('ls /')
    bin  boot  dev	etc  home  lib	lib64  media  mnt  opt	proc  root  run  sbin  srv  sys  tmp  usr  var
    >>> result
    0

    我们使用一个变量来接收命令是否正确执行的结果。而命令执行后的内容会直接输出到控制台上。

    如果我们想要把命令执行后的内容都收集起来呢?那么就需要用到os.popen这个函数了,用法如下:

    # 所有内容收集为一行
    >>> result = os.popen('ls /').read()
    >>> result
    'bin
    boot
    dev
    etc
    home
    lib
    lib64
    media
    mnt
    opt
    proc
    root
    run
    sbin
    srv
    sys
    tmp
    usr
    var
    '
    
    # 多行内容以列表形式返回
    >>> result = os.popen('ls /').readlines()
    >>> result
    ['bin
    ', 'boot
    ', 'dev
    ', 'etc
    ', 'home
    ', 'lib
    ', 'lib64
    ', 'media
    ', 'mnt
    ', 
    'opt
    ', 'proc
    ', 'root
    ', 'run
    ', 'sbin
    ', 'srv
    ', 'sys
    ', 'tmp
    ', 'usr
    ', 'var
    ']

    上面只是演示了这样两个简单的示例,但是根据这样的用法指导,你还可以使用os的这两个函数,来调用更复杂的系统命令。来完成python模块无法完成的任务。这也是为什么python被称为 "胶水语言" 的原因,因为它可以粘合多种不同样式的命令。

    在后面的内容中,我们可能还会更加深入的介绍这个模块的其他函数,今天的内容就是这些,如果觉得对你有帮助,可以为阿飞点个赞。

     
  • 相关阅读:
    leetcode 87. Scramble String
    leetcode 1278 分割回文串
    back propagation in NNs and RNNs
    刷题笔记——单调栈
    unsupervised learning -- K MEANS
    install j3d on macOS
    java extract jar file on MacOS
    back-propagation algorithm
    day 4
    day 3
  • 原文地址:https://www.cnblogs.com/zhaoyong631/p/13131283.html
Copyright © 2011-2022 走看看