• 015、Python模块-os模块详解


    Python模块-os模块详解

    os模块是Python中整理文件和目录最为常用的模块,该模块提供了非常丰富的方法用来处理文件和目录。

    1、系统模块

    1. 获取系统名称

    >>>os.name
    'nt'
    
    • 1
    • 2

    nt: windows系统 posix: Linux系统

    2. 获取系统的换行符

    >>> os.linesep
    '\r\n'  # windows换行符
    >>> os.linesep
    '\n'  # Linux换行符
    
    • 1
    • 2
    • 3
    • 4

    3. 获取当前系统的路径分隔符

    >>>os.sep
    '\\'
    
    • 1
    • 2

    windows下路径分隔符:“\\” Linux下路径分隔符: “/

    4. 获取系统下所有的系统环境变量

    >>> os.environ
    # environ({'XDG_SESSION_ID': '1526', 'HOSTNAME': 'server-ming', 'TERM': 'xterm', 'SHELL': '/bin/bash', 'HISTSIZE': '1000', 'SSH_CLIENT': '124.202.173.218 2098 22', 'SSH_TTY': '/dev/pts/1', 'USER': 'root', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin', 'PWD': '/root', 'LANG': 'en_US.UTF-8', 'HISTCONTROL': 'ignoredups', 'SHLVL': '1', 'HOME': '/root', 'LOGNAME': 'root', 'SSH_CONNECTION': '124.202.173.218 2098 172.26.52.195 22', 'LESSOPEN': '||/usr/bin/lesspipe.sh %s', 'XDG_RUNTIME_DIR': '/run/user/0', '_': '/usr/bin/python3'})
    
    # Linux下获取当前用户
    >>> os.environ.get("USER")  
    'root'
    
    # windows下获取当前用户
    >>> os.environ.get("CURRENT_USER_NAME")
    'Administrator'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    5. 根据环境变更名称,读取环境变量

    # Linux下获取计算机名称
    >>> os.getenv("HOSTNAME")
    'server-ming'
    
    # windows下获取计算机名称
    >>> os.getenv("MY_COMPUTER_NAME")
    'ADTEC-MING'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6. 获取cpu数量

    >>> os.cpu_count()
    8
    
    • 1
    • 2

    7. 获取系统详细信息

    适用于Linux操作系统

    >>> unames = os.uname()
    >>> unames
    posix.uname_result(sysname='Linux', nodename='server-ming', release='3.10.0-957.21.3.el7.x86_64', version='#1 SMP Tue Jun 18 16:35:19 UTC 2019', machine='x86_64')
    >>> unames.sysname
    'Linux'
    
    >>> unames.machine
    'x86_64'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    8. 获取系统当前的登录用户

    >>> os.getlogin()
    'root'
    
    • 1
    • 2

    2、os.path

    a、路径获取

    1. 获取当前的工作路径
    print(os.getcwd())  # d:\mycode\pycode
    
    • 1
    2. 获取文件的绝对路径

    获取当前目录下的某个文件的绝对路径,文件存不存在都会返回

    print(os.path.abspath(__file__))
    # d:\mycode\pycode\demo.py  __file__指当前文件
    
    • 1
    • 2
    3. 将路径分隔在目录和文件名
    print(os.path.split("d:\\mycode\\pycode\\demo.py"))
    # ('d:\\mycode\\pycode', 'demo.py')
    
    • 1
    • 2
    4. 获取文件的目录
    print(os.path.dirname("d:\\mycode\\pycode\\demo.py"))
    # d:\mycode\pycode
    
    • 1
    • 2
    5. 获取路径中最后的文件名
    print(os.path.basename("d:\\mycode\\pycode\\demo.py"))
    # demo.py
    
    • 1
    • 2
    6. 路径拼接
    print(os.path.join(os.getcwd(), 'mytest'))
    # D:\mycode\pycode\mytest
    
    • 1
    • 2
    7. 获取路径(文件/文件夹)的最后访问时间
    from datetime import datetime
    path_atime = os.path.getatime('d:\\mycode\\pycode\\mytest')
    print(datetime.fromtimestamp(path_atime))
    
    # 2022-06-21 10:41:12.095125
    
    • 1
    • 2
    • 3
    • 4
    • 5
    8. 获取路径(文件/文件夹)的创建时间
    from datetime import datetime
    path_ctime = os.path.getctime('d:\\mycode\\pycode\\mytest')
    print(datetime.fromtimestamp(path_ctime))
    
    # 2022-06-21 10:04:53.622260
    
    • 1
    • 2
    • 3
    • 4
    • 5
    9. 获取路径(文件/文件夹)的最后修改时间
    from datetime import datetime
    path_mtime = os.path.getmtime('d:\\mycode\\pycode\\mytest')
    print(datetime.fromtimestamp(path_mtime))
    
    # 2022-06-21 10:41:12.095125
    
    • 1
    • 2
    • 3
    • 4
    • 5
    10. 获取文件大小
    print(os.path.getsize("d:\\mycode\\pycode\\demo.py"))
    # 3555
    
    • 1
    • 2

    获取路径下文件的内容的大小,为空时返回0, 如果路径不存在,则会报错。

    b、路径判断

    1. 判断是否绝对 路径
    print(os.path.isabs("d:\\mycode\\pycode"))
    # True
    
    • 1
    • 2
    2.判断文件路径是否存在
    print(os.path.exists("d:\\mycode\\pycode\\mylogs"))
    # False
    
    • 1
    • 2
    3.判断是否文件
    print(os.path.isfile("d:\\mycode\\pycode\\mylogs"))  # False
    print(os.path.isfile("d:\\mycode\\pycode\\123.py"))  # False
    print(os.path.isfile("d:\\mycode\\pycode\\demo.py"))  # True
    
    • 1
    • 2
    • 3

    如果被判断的路径不是文件或者路径下文件不存在,则返回False,否则话,返回True

    4. 判断是否文件夹
    print(os.path.isdir("d:\\mycode\\pycode\\demo.py"))  # False
    print(os.path.isdir("d:\\mycode\\pycode\\demo"))  # False
    print(os.path.isdir("d:\\mycode\\pycode"))  # True
    
    • 1
    • 2
    • 3

    如果被判断的路径是文件或者文件夹不存在,则返回False。否则返回True.

    5. 判断用户权限
    print(os.access("c:\\windows\\system32\\drivers\\etc\\hosts"))
    
    # False
    
    • 1
    • 2
    • 3

    3、文件及文件夹操作

    1. 列出路径下所的文件

    dir_path = "d:\\mycode"
    print(os.listdir(dir_path))
    
    # ['DevOps', 'DjangoBlog', 'DjangoBlog.xml', 'djcode', 'gocode', 'nginx.conf', 'pycode', 'vuecode']
    
    • 1
    • 2
    • 3
    • 4

    列出路径下所有的文件,并以列表形式返回。

    2. 创建目录

    os.mkdir("d:\\mycode\\pycode\\mylogs")
    
    # 判断目录是否存在,如果不存在,创建
    if not os.path.exists("d:\\mycode\\pycode\\mylogs"):
        os.mkdir("d:\\mycode\\pycode\\mylogs")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果创建的目录存在,会抛出异常。FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。

    3. 递归创建目录

    递归创建目录。如果创建的子目录存在,会抛出异常。

    os.makedirs("d:\\mytest\\test")
    
    if not os.path.exists("d:\\mytest\\test"):
        os.makedirs("d:\\mytest\\test")
    
    • 1
    • 2
    • 3
    • 4

    4. 删除目录

    单个删除目录,如果目录不为空,不进行操作

    os.rmdir("d:\\mytest\\test")
    os.rmdir("d:\\mytest")
    
    • 1
    • 2

    要删除的目录不存在会抛出异常:FileNotFoundError: [WinError 2] 系统找不到指定的文件。

    要删除的目录不为空时抛出异常:OSError: [WinError 145] 目录不是空的。

    5. 递归删除

    归删除目录。 如果子目录成功删除,则removeirs会尝试依次删除路径中显示的每个父目录。如果子目录无法成功删除,则引发OSError。

    os.removedirs("d:\\mytest\\test")
    
    • 1

    6. 删除文件

    os.remove("d:\\mycode\\pycode\\mytest\\11.py")  # 删除成功
    os.remove("d:\\mycode\\pycode\\mytest")
    
    • 1
    • 2

    如果删除的内容是一个文件夹抛出异常: PermissionError: [WinError 5] 拒绝访问。

    7. 重命名

    os.rename("d:\\mycode\\pycode\\mytest", "d:\\mycode\pycode\\new_test")
    
    • 1

    8. 为文件添加权限

    os.chmod("c:\\windows\\system32\\drivers\\etc\\hosts", stat.S_IRWXG)
    
    • 1
    序号内容说明
    1stat.S_ISUID执行时设置用户ID
    2stat.S_ISGID执行时设置组ID。
    3stat.S_ENFMT执行记录锁定。
    4stat.S_ISVTX执行后保存文本映像
    5stat.S_IREAD由所有者读取
    6stat.S_IWRITE由拥有者写入
    7stat.S_IEXEC由所有者执行
    8stat.S_IRWXU由所有者读取,写入和执行
    9stat.S_IRUSR由拥有者读取
    10stat.S_IWUSR由拥有者写入
    11stat.S_IXUSR由所有者执行
    12stat.S_IRWXG按组读取,写入和执行
    13stat.S_IRGRP按组读取
    14stat.S_IWGRP按组写入
    15stat.S_IXGRP按组执行
    16stat.S_IRWXO由其他人读取,写入和执行
    17stat.S_IROTH其他人读取
    18stat.S_IWOTH由他人写
    19stat.S_IXOTH由他人执行
  • 相关阅读:
    MongoDB 的简介
    【PyTorch】深度学习实践 02 线性模型
    制作一个简单HTML电影网页设计(HTML+CSS)
    C++ 关联式容器map+set
    Java框架 Spring5--IOC
    Java异常的处理(超详细)
    Java的数组使用
    map底层实现原理
    c 实用化的摄像头生成avi视频程序(加入精确的时间控制和随时停止录像功能)
    怎么压缩ppt大小?快速压缩ppt文件
  • 原文地址:https://blog.csdn.net/haiming0415/article/details/126203126