zoukankan      html  css  js  c++  java
  • python os 模块使用 系统操作 | 文件操作 | 目录操作 | 路径 | 权限操作 Marathon

    OS模块常用详解

    OS模块是python标准库中用于访问操作系统功能的模块,使用OS模块 提供的接口可以实现跨平台访问。

    通用操作:

    1.获取平台信息,环境变量或进程等信息
    2.目录和文件的操作
    3.判断操作
    

    1.系统操作

    import os
    
    # 获取系统的分隔符,Linux>>>"/"
    print(os.sep)
    # work platform  linux >>> posix
    print(os.name)
    
    # 读取环境变量
    print(os.getenv('env_name'))
    print(os.environ)
    # environ({'PATH': '/home/ubuntu/.virtualenvs/py37/bin:/home/ubuntu/.local/bin:/opt/jdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 'XAUTHORITY': '/run/user/1000/gdm/Xauthority', 'XMODIFIERS': '@im=fcitx', 'XDG_DATA_DIRS': '/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop', 'GDMSESSION': 'ubuntu', 'TEXTDOMAINDIR': '/usr/share/locale/', 'GTK_IM_MODULE': 'fcitx', 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus', 'PS1': '(py37) ', 'XDG_CURRENT_DESKTOP': 'ubuntu:GNOME', 'SSH_AGENT_PID': '1593', 'QT4_IM_MODULE': 'fcitx', 'SESSION_MANAGER': 'local/ubuntu:@/tmp/.ICE-unix/1469,unix/ubuntu:/tmp/.ICE-unix/1469', 'USERNAME': 'ubuntu', 'LOGNAME': 'ubuntu', 'PWD': '/home/ubuntu/workspace/skyguard/wordcloud/os模块', 'IM_CONFIG_PHASE': '2', 'PYCHARM_HOSTED': '1', 'GJS_DEBUG_TOPICS': 'JS ERROR;JS LOG', 'PYTHONPATH': '/home/ubuntu/workspace/skyguard/wordcloud', 'SHELL': '/bin/bash', 'GIO_LAUNCHED_DESKTOP_FILE': '/usr/share/applications/jetbrains-pycharm-ce.desktop', 'OLDPWD': '/opt/pycharm-community-2020.2.2/bin', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'GTK_MODULES': 'gail:atk-bridge', 'VIRTUAL_ENV': '/home/ubuntu/.virtualenvs/py37', 'CLUTTER_IM_MODULE': 'xim', 'TEXTDOMAIN': 'im-config', 'XDG_SESSION_DESKTOP': 'ubuntu', 'SHLVL': '0', 'QT_IM_MODULE': 'fcitx', 'JAVA_HOME': '/opt/jdk-11', 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/etc/xdg', 'LANG': 'en_US.UTF-8', 'XDG_SESSION_ID': '1', 'XDG_SESSION_TYPE': 'x11', 'DISPLAY': ':0', 'PYTHONIOENCODING': 'UTF-8', 'GPG_AGENT_INFO': '/run/user/1000/gnupg/S.gpg-agent:0:1', 'DESKTOP_SESSION': 'ubuntu', 'USER': 'ubuntu', 'XDG_MENU_PREFIX': 'gnome-', 'GIO_LAUNCHED_DESKTOP_FILE_PID': '3342', 'QT_ACCESSIBILITY': '1', 'WINDOWPATH': '1', 'GJS_DEBUG_OUTPUT': 'stderr', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'XDG_SEAT': 'seat0', 'PYTHONUNBUFFERED': '1', 'GNOME_SHELL_SESSION_MODE': 'ubuntu', 'XDG_VTNR': '1', 'XDG_RUNTIME_DIR': '/run/user/1000', 'HOME': '/home/ubuntu'})
    
    # 获取当前路径
    print(os.getcwd())
    # /home/ubuntu/workspace/skyguard/wordcloud/os模块
    
    # system info
    print(os.uname())
    # posix.uname_result(sysname='Linux', nodename='ubuntu', release='5.4.0-58-generic', version='#64~18.04.1-Ubuntu SMP Wed Dec 9 17:11:11 UTC 2020', machine='x86_64')
    print(os.uname().sysname)
    # Linux
    print(os.uname().nodename)
    # ubuntu
    print(os.uname().release)
    # 5.4.0-58-generic
    print(os.uname().version)
    # #64~18.04.1-Ubuntu SMP Wed Dec 9 17:11:11 UTC 2020
    
    
    os.system("cmd options")
    # 类似于直接在终端执行命令,成功返回0,但有时不会得到预料结果,有多个命令最好隔开执行,
    # e.g. os.system("cd /home && touch aaaa") 或者 os.system("cd /home; touch aaaa")
    
    os.system("mkdir hahahah")
    # 当前目录下创建目录
    
    
    

    2.目录操作

    # 目录的CRUD
    
    # 查看 R
    # print(os.listdir("."))
    # # ['test.txt', 'os_demo01.py'] 当前目录下的文件或目录
    # print(os.listdir(".."))
    # # 上一级目录下的文件或目录
    # os.getcwd()
    # 返回当前进程目录
    
    
    #
    # # 创建目录 C
    # # 只创建一个目录,已经存在则失败
    # print(os.mkdir("./test")) # None
    # # 当前目录下创建名为“test”的目录
    # # 递归创建目录,已经存在则失败
    # print(os.makedirs('test1/test2/test3')) # None
    #
    # # 更改命名,文件或目录 U
    # os.rename("test.txt", "testNew.txt")
    # os.rename("test1", "test1New")
    #
    # # 删除目录,如有文件则失败 D
    # os.rmdir("test")
    # os.removedirs("test1New")
    
    # 改变当前目录,到指定目录
    # os.chdir('../')
    

    3.文件操作

    # 文件的CRUD
    
    # 获取文件大小
    print(os.path.getsize('os_demo01.py'))
    
    # 新建文件 C
    # f = open("test",'w')
    # f.close()
    
    # rename a file U
    os.rename('creatTestNew', 'creatTestNew1')
    
    # remove file D
    os.remove('creatTestNew1')
    
    # read file R
    # ref file operation
    f = open('test', 'r')
    f.read()
    f.readline()
    f.close()
    
    print( os.path.getatime(file) )   # 输出最近访问时间
    print( os.path.getctime(file) )   # 输出文件创建时间
    print( os.path.getmtime(file) )   # 输出最近修改时间
    

    分离文件后缀 & 遍历

    # split file and post
    print(os.path.splitext('testNew.txt'))
    # ('testNew', '.txt')
    
    # 目录名和文件名分离
    print(os.path.split('/tmp/hello/python.jpg'))
    # ('/tmp/hello', 'python.jpg')
    
    # 遍历目录
    for root,dir,files in os.walk('/var/log'):
       print(root)
       print(files)
       print(dir)
       for name in files:
            print(join(root,name))
            
    # 遍历文件
    from collections import Iterable
    f = open('/mnt/test')
    print(isinstance(f,Iterable))
    for i,item in enumerate(f):
       if i == 10:
            break
       print(i,item)
    
    

    4.路径操作

    # 文件路径
    # 判断是否为绝对路径
    print(os.path.isabs("test.txt")) # False
    print(os.path.isabs("/home/ubuntu/workspace/skyguard/wordcloud/os模块/test.txt")) # True
    
    # 生成绝对路径
    print(os.path.abspath("test.txt"))
    # /home/ubuntu/workspace/skyguard/wordcloud/os模块/test.txt
    
    # 指定绝对路径拼接,但不会判断是否有这个绝对路径
    print(os.path.join("test/test", "test.txt"))
    # test/test/test.txt
    
    # 获取文件名或目录名
    filename = "/home/ubuntu/workspace/skyguard/test.txt"
    print(os.path.basename(filename))
    # test.txt 获取文件名
    print(os.path.dirname(filename))
    # /home/ubuntu/workspace/skyguard 获取目录名
    

    5.常用判断及权限操作

    判断

    # 判断文件或目录是否存在
    print(os.path.exists('data1.txt'))
    # True or False
    
    # 判断是否为绝对路径
    os.path.isabs(path)	
    # 判断路径是否为文件
    os.path.isfile(path)
    # 判断路径是否为目录
    os.path.isdir(path)	
    

    权限

    # 更改文件或目录的权限
    os.chmod(path, mode)
    
    # path -- 文件名路径或目录路径。
    
    # flags -- 可用以下选项按位或操作生成, 目录的读权限表示可以获取目录里文件名列表, ,执行权限表示可以把工作目录切换到此目录 ,删除添加目录里的文件必须同时有写和执行权限 ,文件权限以用户id->组id->其它顺序检验,最先匹配的允许或禁止权限被应用。
    ***
    stat.S_IXOTH: 其他用户有执行权0o001
    stat.S_IWOTH: 其他用户有写权限0o002
    stat.S_IROTH: 其他用户有读权限0o004
    stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007
    stat.S_IXGRP: 组用户有执行权限0o010
    stat.S_IWGRP: 组用户有写权限0o020
    stat.S_IRGRP: 组用户有读权限0o040
    stat.S_IRWXG: 组用户有全部权限(权限掩码)0o070
    stat.S_IXUSR: 拥有者具有执行权限0o100
    stat.S_IWUSR: 拥有者具有写权限0o200
    stat.S_IRUSR: 拥有者具有读权限0o400
    stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700
    stat.S_ISVTX: 目录里文件目录只有拥有者才可删除更改0o1000
    stat.S_ISGID: 执行此文件其进程有效组为文件所在组0o2000
    stat.S_ISUID: 执行此文件其进程有效用户为文件所有者0o4000
    stat.S_IREAD: windows下设为只读
    stat.S_IWRITE: windows下取消只读
    ***
    
    # 假定 /tmp/foo.txt 文件存在,设置文件可以通过用户组执行
    os.chmod("/tmp/foo.txt", stat.S_IXGRP)
    # 设置文件可以被其他用户写入
    os.chmod("/tmp/foo.txt", stat.S_IWOTH)
    
    
    
  • 相关阅读:
    (转)干货|一次完整的性能测试,测试人员需要做什么?
    (转)JMeter性能测试-服务器资源监控插件详解
    【Android Apk重新签名报错re-sign.jar之解决方法】
    CrackMe_001
    判断二叉树是否是镜像对称
    顺时针打印矩阵
    利用前序遍历和中序遍历构造二叉树
    二叉树的四种遍历方式
    最长回文子串
    同步/异步/阻塞/非阻塞
  • 原文地址:https://www.cnblogs.com/davis12/p/14283188.html
Copyright © 2011-2022 走看看