资讯详情

python之os模块

os模块

文章目录

  • os模块
    • OS模块介绍
      • 什么是OS模块
      • OS模块的作用
      • 环境变量是什么?
      • os.environ与系统环境变量和sys.path环境变量的差异:
    • 二、os系列
    • 三、os.path系列
        • os.path.normcase( ) 说明
      • os.path.normpath( ) 说明
    • 三、OS路径处理
      • 1.方法1(通用)
      • 2.方法二
    • 四、 pathlib模块(在python3.5之后推出)
    • 五、案例

OS模块介绍

什么是OS模块

  • os模块是与操作系统的界面

OS模块的作用

  • 该模块为python自带标准库模块
  • 该函数提供了一些方便使用操作系统相关功能的函数

什么是环境变量

  • 环境变量是一个总称,它是一个全球变量,对你的整个环境都有效, 它比你python文件的整体水平更高. 它指的是你整个软件的环境, 这样一个环境变量,你可以访问软件的所有地方. 此时文件没有限制, 所有文件都可以访问.
  • 一般是指操作系统中指定操作系统运行环境的一些参数,如临时文件夹位置、系统文件夹位置等
  • 操作系统到了这一系列的时候,就到了你的命令输入在里面吗?

os.environ与系统环境变量和sys.path环境变量的差异:

  • 系统path环境变量:用于执行操作系统命令, 在寻找命令时使用操作系统, 该变量对应的值是一堆文件夹, 这些文件夹, 操作系统命令时, 会去这一系列文件夹找你输入的命令吗?.

  • sys.path环境变量:以列表的形式保存,存储一堆文件夹,在环境变量中检索文件夹

  • os.environ环境变量:是的,存储在字典中的一系列键和值, 当你想在整个环境中使用这个值时, 你可以把这个值往添加到环境变量中

二、os系列

以下是os的常用方法:

方法 作用 拓展
输出字符串指示当前使用的平台。 windows下为"nt",Linux下为"posix"
os.getcwd 获得当前工作目录,即当前工作目录python脚本工作目录路径 注意: 执行文件是获取的.如果该功能被导入模块, 不是导入模块文件的目录路径。而是当前执行文件的目录路径。
删除文件 -
重命名文件/目录 将新文件命名为旧文件。 旧文件必须不存在, 若是存在的文件, 抛出异常)
os.stat(file) 获取文件属性或目录信息 -
创建目录 单级生存目录。 如果指定了目录的路径, 如果你想生成单级的最后一级目录,就不存在了。然后就会抛出异常。(相当于shell中的mkdir dirname)
多层递归目录可生成 -
删除目录 删除单级空目录。如果目录不是空的,则不能删除。会抛出异常。(相当于shell中的rmdir dirname)
os.removedirs(r“c:\python”) 如果目录为空,则删除并递归到上一级目录。如果也是空的,则删除,等等 多层目录的递归删除. 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 (注意: 只有为空才能删除)
运行shell命令, 直接显示 应用程序将系统调用发送到操作系统。告诉操作系统操作字符串中指定的命令。
os.linesep 给出当前平台的行终止符,Windows使用 ‘\r\n’,Linux使用 ‘\n’, Mac使用 ‘\r’ 突出当前平台使用导航终止服务。windows下为"\r\n",Linux下为"/n" (提示: 直接打印看不到任何效果。我们需要把它放在列表中. 如: [os.linesep])
返回指定目录下的所有文件和目录名, 包括隐藏文件和列表打印 -
通过类似于深度遍历的方式,最基本的显示方式是遍历文件夹中的子文件夹和文件(root_path,[file_dirs],[files]) -
os.curdir 返回当前目录 以’.'符号的形式表示
os.chdir(‘dirname’) 改变工作目录到’dirname’ 相当于是shell下的cd命令
os.pardir 获取当前目录的父目录字符串名:(’…’) 以’…'符号的形式表示
os.sep 取代操作系统特定的路径分隔符, win下为"", Linux下为"/" -
输出用于分割文件路径的字符串 win下为" ; " , Linux下为" :" -
获取系统环境变量 注意:以字典格式存在, 其中key和value必须都为字符串类型。
  • import os
    
    print(os.environ)
    '''输出内容 environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'ANSYS180_DIR': 'F:\\ANSYS Inc\\v180\\ANSYS', 'ANSYS_SYSDIR': 'winx64', 'ANSYS_SYSDIR32': 'win32', 'ANS_OLD_ATTACH': '1', 'APPDATA': 'C:\\Users\\ThinkPad\\AppData\\Roaming', 'AWP_LOCALE180': 'en-us', 'CHOCOLATEYINSTALL': 'C:\\ProgramData\\chocolatey', 'CHOCOLATEYLASTPATHUPDATE': '132503483593518657', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'DESKTOP-GCJC73B', 'COMSPEC': 'C:\\WINDOWS\\system32\\cmd.exe', 'CONFIGSETROOT': 'C:\\WINDOWS\\ConfigSetRoot', 'DRIVERDATA': 'C:\\Windows\\System32\\Drivers\\DriverData', 'FPS_BROWSER_APP_PROFILE_STRING': 'Internet Explorer', 'FPS_BROWSER_USER_PROFILE_STRING': 'Default', 'FREI0R_PATH': 'E:\\新建文件夹\\Video Converter Studio\\frei0r;E:\\新建文件夹\\Video Converter Studio\\frei0r', 'GOPATH': 'C:\\Users\\ThinkPad\\go', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\ThinkPad', 'ICEMCFD_SYSDIR': 'win64_amd', 'IDEA_INITIAL_DIRECTORY': 'F:\\PyCharm\\bin', 'LANG': 'chs', 'LNKEVN': 'C:\\Program Files (x86)\\Internet Explorer\\iexplore.exe', 'LOCALAPPDATA': 'C:\\Users\\ThinkPad\\AppData\\Local', 'LOGONSERVER': '\\\\DESKTOP-GCJC73B', 'LSTC_LICENSE': 'ANSYS', 'NUMBER_OF_PROCESSORS': '8', 'ONEDRIVE': 'C:\\Users\\ThinkPad\\OneDrive', 'OS': 'Windows_NT', 'PATH': 'F:\\python_16\\venv\\Scripts;F:\\Python38\\Scripts;C:\\Program Files (x86)\\Intel\\iCLS Client\\;C:\\Program Files\\Intel\\iCLS Client\\;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files\\proeWildfire 5.0\\bin;D:\\Program Files\\proeWildfire 5.0\\bin;D:\\PTC\\Proe5.0M280\\bin;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files (x86)\\Common Files\\Thunder Network\\KanKan\\Codecs;C:\\Program Files\\dotnet\\;C:\\Program Files\\Pandoc\\;F:\\Go\\bin;F:\\Python38;F:\\Python27;F:\\Python27\\Scripts;C:\\ProgramData\\chocolatey\\bin;F:\\Typeeasy\\;F:\\git\\cmd;C:\\Users\\ThinkPad\\AppData\\Local\\Microsoft\\WindowsApps;;F:\\PyCharm\\bin;;C:\\Users\\ThinkPad\\go\\bin;C:\\Users\\ThinkPad\\AppData\\Roaming\\npm', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC', 'PROCESSOR_ARCHITECTURE': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 142 Stepping 10, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '8e0a', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PROMPT': '(venv) $P$G', 'PSMODULEPATH': 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules', 'PUBLIC': 'C:\\Users\\Public', 'PYCHARM': 'F:\\PyCharm\\bin;', 'PYCHARM_DISPLAY_PORT': '63342', 'PYCHARM_HOSTED': '1', 'PYTHONIOENCODING': 'UTF-8', 'PYTHONPATH': 'F:\\PyCharm\\plugins\\python\\helpers\\pycharm_matplotlib_backend;F:\\PyCharm\\plugins\\python\\helpers\\pycharm_display', 'PYTHONUNBUFFERED': '1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\WINDOWS', 'TEMP': 'C:\\Users\\ThinkPad\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\ThinkPad\\AppData\\Local\\Temp', 'UGII_BASE_DIR': 'E:\\UG_NX8.5_Win64位', 'UGII_LANG': 'simpl_chinese', 'UGII_ROOT_DIR': 'E:\\UG_NX8.5_Win64位\\UGII\\', 'UGS_LICENSE_SERVER': '28000@desktop-gcjc73b', 'USERDOMAIN': 'DESKTOP-GCJC73B', 'USERDOMAIN_ROAMINGPROFILE': 'DESKTOP-GCJC73B', 'USERNAME': 'ThinkPad', 'USERPROFILE': 'C:\\Users\\ThinkPad', 'VIRTUAL_ENV': 'F:\\python_16\\venv', 'WINDIR': 'C:\\WINDOWS', 'WXDRIVE_START_ARGS': '--wxdrive-setting=0 --disable-gpu --disable-software-rasterizer --enable-features=NetworkServiceInProcess', '_OLD_VIRTUAL_PATH': 'F:\\Python38\\Scripts;C:\\Program Files (x86)\\Intel\\iCLS Client\\;C:\\Program Files\\Intel\\iCLS Client\\;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files\\proeWildfire 5.0\\bin;D:\\Program Files\\proeWildfire 5.0\\bin;D:\\PTC\\Proe5.0M280\\bin;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files (x86)\\Common Files\\Thunder Network\\KanKan\\Codecs;C:\\Program Files\\dotnet\\;C:\\Program Files\\Pandoc\\;F:\\Go\\bin;F:\\Python38;F:\\Python27;F:\\Python27\\Scripts;C:\\ProgramData\\chocolatey\\bin;F:\\Typeeasy\\;F:\\git\\cmd;C:\\Users\\ThinkPad\\AppData\\Local\\Microsoft\\WindowsApps;;F:\\PyCharm\\bin;;C:\\Users\\ThinkPad\\go\\bin;C:\\Users\\ThinkPad\\AppData\\Roaming\\npm', '_OLD_VIRTUAL_PROMPT': '$P$G'}) '''
    
    print(type(os.environ))
    '''输出内容 <class 'os._Environ'> '''
    
    # 向环境变量中设置值,取值
    # 后面我们连接数据库的用户名密码,不写死到代码中,而是配置在环境变量中,使用代码获取
    os.environ["username"] = "淘小欣"
    name = os.environ.get("username")
    print(name)  # 淘小欣
    
    
  • os.walk()的使用

    import os
    dir_path=os.walk("F:\python_16\day 31")
    print(dir_path) #<generator object walk at 0x00000208CFB77C10>(拿到的是一个生成器)
    
    1.我们对其循环取值
    for i in dir_path:
        print(i)
    '''输出内容 ('F:\\python_16\\day 31', ['test', '__pycache__'], ['app.py', 'foo.py', 'os.py', 'run.py']) ('F:\\python_16\\day 31\\test', ['a', 'c'], []) ('F:\\python_16\\day 31\\test\\a', [], ['a.py']) ('F:\\python_16\\day 31\\test\\c', [], ['c.py']) ('F:\\python_16\\day 31\\__pycache__', [], ['app.cpython-38.pyc', 'foo.cpython-38.pyc']) '''
    #可以发现os.walk()以元组为单位区分每一层,每一层又分为三个部分(根目录路径, 根目录下的文件夹列表, 根目录下的文件列表)
    
    2.我们也可以将三个部分遍历出来分开查看
    for root,dirs,files in dir_path:
        print(root)
        print(dirs)
        print(files)
        print("=======》")
        
    '''输出内容 F:\python_16\day 31 ['test', '__pycache__'] ['app.py', 'foo.py', 'os.py', 'run.py'] =======》 F:\python_16\day 31\test ['a', 'c'] [] =======》 F:\python_16\day 31\test\a [] ['a.py'] =======》 F:\python_16\day 31\test\c [] ['c.py'] =======》 F:\python_16\day 31\__pycache__ [] ['app.cpython-38.pyc', 'foo.cpython-38.pyc'] =======》 '''
    
    3.用os.walk计算一个文件夹的大小示例
    
    import os
    def dir_size():
        while True:
            dir_path=input("请输入文件夹路径(Q\q退出)>>>:").strip()
            size=0  #初始化大小
            if dir_path.upper()=="Q":break
            if not os.path.isdir(dir_path):     #判断是否存在该目录
                print("没有该文件夹,请重新输入")
            path_list=os.walk(dir_path)         #得到生成器
            for root,dirs,files in path_list:   #遍历三个元素
                for i in files:                 #每次遍历取出文件
                    size +=os.path.getsize(os.path.join(root,i))    #拼接文件路径并计算大小
            print(f"该目录文件总大小为:{size}")
    
    dir_size()
    
    

三、os.path系列

os.path系列主要用于获取文件的属性, 以下是常用方法 :

方法 作用
os.path.abspath(path) 返回规范化的绝对路径 (多个""只识别一个)
返回文件名 (如果传入的是路径,会切出文件名)
返回文件路径 (就是当前文件或目录的上一级目录)
如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
os.path.getatime(path) 返回最近访问时间(浮点型, 有秒级)
os.path.getmtime(path) 返回最近文件修改时间
os.path.getctime(path) 返回文件 path 创建时间
返回文件大小,如果文件不存在就返回错误
os.path.isabs(path) 判断是否为绝对路径
判断路径是否为文件
判断路径是否为目录
把目录和文件名拼接成一个路径
转换path的大小写和斜杠 (只在 windows 平台上有效)
规范path字符串形式
os.path.split(path) 把路径分割成 dirname 和 basename,返回一个元组

三、OS路径处理

1.方法一(通用)

  • 这种方法比较通用, Python2 和 Python3 中都适用

  • 可以先使用 规范一下返回路径

    import os
    
    print(os.path.abspath(__file__))  # F:\python_16\day 29\add.py
    
    BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
    print(BASE_DIR)  # F:\python_16(返回上一级两次)
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    print(BASE_DIR)  # F:\python_16(返回上一级两次)
    
    BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
    print(BASE_DIR)  # F:\(返回上一级三次)
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    print(BASE_DIR)  # F:\(返回上一级三次)
    

2.方法二

  • 使用比较简单

  • : 上一级

  • : 规范path字符串形式

    #其中可以不使用abspath
    import os
    
    print(os.path.abspath(__file__))  #F:\python_16\day 29\add.py
    
    BASE_DIR = os.path.normpath(os.path.join(__file__,os.pardir,os.pardir))
    print(BASE_DIR)  # F:\python_16 (返回上一级两次)
    
    BASE_DIR = os.path.normpath(os.path.join(__file__,os.pardir,".."))
    print(BASE_DIR)  # F:\python_16 (返回上一级两次)
    
    BASE_DIR = os.path.normpath(os.path.join(__file__,"..","..",".."))
    print(BASE_DIR)  # F:\ (返回上一级三次)
    
    

四、 pathlib模块(在python3.5之后推出)

# , 推出了一个新的模块pathlib
from pathlib import Path

# 需求: 获取当前文件的父级的父级目录
res = Path(__file__).parent.parent
print(res)

# 路径拼接 + 规范化路径
res = Path('//\\a//\\\\/b/c') / 'd/e.txt'
print(res)  # \a\b\c\d\e.txt
print(type(res))  # <class 'pathlib.WindowsPath'>

# 规范化路径
print(res.resolve())   # 等同于os.path.abspath

五、案例

  • 需求实现: 不利用os.path.getsize统计文件夹的大小, 利用递归实现统计整个文件下含有的所有文件大小

    def search_folder_size(folder_path):
        size = 0
        if os.path.isfile(folder_path):
            return os.path.getsize(folder_path)
    
        for file_or_dir in os.listdir(folder_path):  # os.listdir不能判断文件, 如果是文件会抛出异常(NotADirectoryError)
            path = os.path.join(folder_path, file_or_dir)
            if os.path.isfile(path):
                size += os.path.getsize(path)
            else:
                # return search_folder_size(path) # 注意: 这里不能加return。 # 递归一旦return 递归里面的内容,就不会继续往下走了, 从当前位置直接开始回溯,得到最终的结果 # 因为递归是在需要得到预期的结果的时候再去return, 这个return必须严格控制好(return之前, 我们要重新调用search_folder_size(path), 这个时候当它是一个文件的时候, 它的size就是一个全新的size=0, 计算完毕以后开始回溯, 回溯回来以后, 我们之前有个return这个时候就把那个size=0, 0当做结果返回了)
                search_folder_size(path)
        return size
    

标签: 72v180ah锂电池电容量

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台