外贸购物网站开发,国际新闻最新消息今天大事件,wordpress获取页面tag,无锡找做网站公司1. 简介
os就是“operating system”的缩写#xff0c;顾名思义#xff0c;os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块#xff0c;一方面可以方便地与操作系统进行交互#xff0c;另一方面页也可以极大增强代码的可移植性。如果该模块中相…1. 简介
os就是“operating system”的缩写顾名思义os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块一方面可以方便地与操作系统进行交互另一方面页也可以极大增强代码的可移植性。如果该模块中相关功能出错会抛出OSError异常或其子类异常。 注意如果是读写文件的话建议使用内置函数open()如果是路径相关的操作建议使用os的子模块os.path如果要逐行读取多个文件建议使用fileinput模块要创建临时文件或路径建议使用tempfile模块要进行更高级的文件和路径操作则应当使用shutil模块。 当然使用os模块可以写出操作系统无关的代码并不意味着os无法调用一些特定系统的扩展功能但要切记一点一旦这样做就会极大损害代码的可移植性。
此外导入os模块时还要小心一点千万不要为了图调用省事儿而将os模块解包导入即不要使用from os import *来导入os模块否则os.open()将会覆盖内置函数open()从而造成预料之外的错误。
2. 常用功能 注意os模块中大多数接受路径作为参数的函数也可以接受“文件描述符”作为参数。 文件描述符file descriptor在 Python 文档中简记为 fd是一个与某个打开的文件对象绑定的整数可以理解为该文件在系统中的编号。 2.1 os.name
该属性宽泛地指明了当前 Python 运行所在的环境实际上是导入的操作系统相关模块的名称。这个名称也决定了模块中哪些功能是可用的哪些是没有相应实现的。
目前有效名称为以下三个posixntjava。
其中posix是 Portable Operating System Interface of UNIX可移植操作系统接口的缩写。Linux 和 Mac OS 均会返回该值nt全称应为“Microsoft Windows NT”大体可以等同于 Windows 操作系统因此 Windows 环境下会返回该值java则是 Java 虚拟机环境下的返回值。
因此在我的电脑win10上执行下述代码返回值是nt import os os.nament
而在 WSLWindows Subsystem LinuxWindows 下的 Linux 子系统上的结果则是 import os os.nameposix 查看sys模块中的sys.platform属性可以得到关于运行平台更详细的信息在此不再赘述 2.2 os.environ
os.environ属性可以返回环境相关的信息主要是各类环境变量。返回值是一个映射类似字典类型具体的值为第一次导入os模块时的快照其中的各个键值对键是环境变量名值则是环境变量对应的值。在第一次导入os模块之后除非直接修改os.environ的值否则该属性的值不再发生变化。
比如其中键为“HOMEPATH”Windows 下Linux 下为“HOME”的项对应的值就是用户主目录的路径。Windows 下其值为 os.environ[HOMEPATH]d:\\justdopython
Linux 下其值为 os.environ[HOME]/home/justdopython
2.3 os.walk()
这个函数需要传入一个路径作为top参数函数的作用是在以top为根节点的目录树中游走对树中的每个目录生成一个由(dirpath, dirnames, filenames)三项组成的三元组。
其中dirpath是一个指示这个目录路径的字符串dirnames是一个dirpath下子目录名除去“.”和“..”组成的列表filenames则是由dirpath下所有非目录的文件名组成的列表。要注意的是这些名称并不包含所在路径本身要获取dirpath下某个文件或路径从top目录开始的完整路径需要使用os.path.join(dirpath, name)。
注意最终返回的结果是一个迭代器我们可以使用for语句逐个取得迭代器的每一项 for item in os.walk(.):... print(item)...(., [do], [go_go_go.txt])(.\\do, [IAmDirectory, python], [])(.\\do\\IAmDirectory, [], [])(.\\do\\python, [], [hello_justdopython.txt]) 目录树结构
2.4 os.listdir()
“listdir”即“list directories”列出当前目录下的全部路径及文件。该函数存在一个参数用以指定要列出子目录的路径默认为“.”即“当前路径”。
函数返回值是一个列表其中各元素均为字符串分别是各路径名和文件名。
通常在需要遍历某个文件夹中文件的场景下极为实用。
比如定义以下函数
def get_filelists(file_dir.): list_directory os.listdir(file_dir) filelists [] for directory in list_directory: # os.path 模块稍后会讲到 if(os.path.isfile(directory)): filelists.append(directory) return filelists
该函数的返回值就是当前目录下所有文件而非文件夹的名称列表。
2.5 os.mkdir()
“mkdir”即“make directory”用处是“新建一个路径”。需要传入一个类路径参数用以指定新建路径的位置和名称如果指定路径已存在则会抛出FileExistsError异常。
该函数只能在已有的路径下新建一级路径否则即新建多级路径会抛出FileNotFoundError异常。
相应地在需要新建多级路径的场景下可以使用os.makedirs()来完成任务。函数os.makedirs()执行的是递归创建若有必要会分别新建指定路径经过的中间路径直到最后创建出末端的“叶子路径”。
示例如下 os.mkdir(test_os_mkdir) os.mkdir(test_os_mkdir)Traceback (most recent call last): File stdin, line 1, in moduleFileExistsError: [WinError 183] 当文件已存在时无法创建该文件。: test_os_mkdir os.mkdir(test_os_mkdir/test_os_makedirs/just/do/python/hello)Traceback (most recent call last): File stdin, line 1, in moduleFileNotFoundError: [WinError 3] 系统找不到指定的路径。: test_os_mkdir/test_os_makedirs/just/do/python/hello os.makedirs(test_os_mkdir/test_os_makedirs/just/do/python/hello)
2.6 os.remove()
用于删除文件如果指定路径是目录而非文件的话就会抛出IsADirectoryError异常。删除目录应该使用os.rmdir()函数。
同样的对应于os.makedirs()删除路径操作os.rmdir()也有一个递归删除的函数os.removedirs()该函数会尝试从最下级目录开始逐级删除指定的路径几乎就是一个os.makedirs()的逆过程一旦遇到非空目录即停止。
2.7 os.rename()
该函数的作用是将文件或路径重命名一般调用格式为os.rename(src, dst)即将src指向的文件或路径重命名为dst指定的名称。
注意如果指定的目标路径在其他目录下该函数还可实现文件或路径的“剪切并粘贴”功能。但无论直接原地重命名还是“剪切粘贴”中间路径都必须要存在否则就会抛出FileNotFoundError异常。如果目标路径已存在Windows 下会抛出FileExistsError异常Linux 下如果目标路径为空且用户权限允许则会静默覆盖原路径否则抛出OSError异常
和上两个函数一样该函数也有对应的递归版本os.renames()能够创建缺失的中间路径。
注意这两种情况下如果函数执行成功都会调用os.removedir()函数来递归删除源路径的最下级目录。
2.8 os.getcwd()
“getcwd”实际上是“get the current working directory”的简写顾名思义也就是说这个函数的作用是“获取当前工作路径”。在程序运行的过程中无论物理上程序在实际存储空间的什么地方“当前工作路径”即可认为是程序所在路径与之相关的“相对路径”、“同目录下模块导入”等相关的操作均以“当前工作路径”为准。
在交互式环境中返回的就是交互终端打开的位置而在 Python 文件中返回的则是文件所在的位置。
在 Windows 下会有如下输出 os.getcwd()d:\\justdopython\\just\\do\\python
Linux 下的输出则是 os.getcwd()/home/justdopython/just/do/python
2.9 os.chdir()
“chdir”其实是“change the directory”的简写因此os.chdir()的用处实际上是切换当前工作路径为指定路径。其中“指定路径”需要作为参数传入函数os.chdir()该参数既可以是文本或字节型字符串也可以是一个文件描述符还可以是一个广义的类路径path-like对象。若指定路径不存在则会抛出FileNotFoundError异常。
在 Windows 下调用该函数的效果为 os.chdir(d:/justdopython/just/do) os.getcwd()d:\\justdopython\\just\\do
在 Linux 下的效果则是 os.chdir(/home/justdopython/just/do) # 也可将参数指定为..即可切换到父目录 os.getcwd()/home/justdopython/just/do
有了这个函数跨目录读写文件和调用模块就会变得非常方便了很多时候也就不必再反复将同一个文件在各个目录之间复制粘贴运行脚本完全可以坐镇中军在一个目录下完成对其他目录文件的操作正所谓“运筹帷幄之中决胜于千里之外”也。
举例来说可以通过将“当前工作目录”切换到父目录从而直接访问父目录的文件内容 os.chdir(..) os.getcwd()D:\\justdopython\\just with open(hello_justdopython.txt, encodingutf-8) as f:... f.read()...欢迎访问 justdopython.com一起学习 Python 技术~ os.listdir()[hello_justdopython.txt]
3. os.path 模块
其实这个模块是os模块根据系统类型从另一个模块导入的并非直接由os模块实现比如os.name值为nt则在os模块中执行import ntpath as path如果os.name值为posix则导入posixpath。
使用该模块要注意一个很重要的特性os.path中的函数基本上是纯粹的字符串操作。换句话说传入该模块函数的参数甚至不需要是一个有效路径该模块也不会试图访问这个路径而仅仅是按照“路径”的通用格式对字符串进行处理。
更进一步地说os.path模块的功能我们都可以自己使用字符串操作手动实现该模块的作用是让我们在实现相同功能的时候不必考虑具体的系统尤其是不需要过多关注文件系统分隔符的问题。
3.1 os.path.join()
这是一个十分实用的函数可以将多个传入路径组合为一个路径。实际上是将传入的几个字符串用系统的分隔符连接起来组合成一个新的字符串所以一般的用法是将第一个参数作为父目录之后每一个参数即是下一级目录从而组合成一个新的符合逻辑的路径。
但如果传入路径中存在一个“绝对路径”格式的字符串且这个字符串不是函数的第一个参数那么其他在这个参数之前的所有参数都会被丢弃余下的参数再进行组合。更准确地说只有最后一个“绝对路径”及其之后的参数才会体现在返回结果中。 os.path.join(just, do, python, dot, com)just\\do\\python\\dot\\com os.path.join(just, do, d:/, python, dot, com)d:/python\\dot\\com os.path.join(just, do, d:/, python, dot, g:/, com)g:/com
3.2 os.path.abspath()
将传入路径规范化返回一个相应的绝对路径格式的字符串。
也就是说当传入路径符合“绝对路径”的格式时该函数仅仅将路径分隔符替换为适应当前系统的字符不做其他任何操作并将结果返回。所谓“绝对路径的格式”其实指的就是一个字母加冒号之后跟分隔符和字符串序列的格式 os.path.abspath(a:/just/do/python)a:\\just\\do\\python # 我的系统中并没有 a 盘
当指定的路径不符合上述格式时该函数会自动获取当前工作路径并使用os.path.join()函数将其与传入的参数组合成为一个新的路径字符串。示例如下 os.path.abspath(ityouknow)D:\\justdopython\\ityouknow
3.3 os.path.basename()
该函数返回传入路径的“基名”即传入路径的最下级目录。 os.path.basename(/ityouknow/justdopython/IAmBasename)IAmBasename # 我的系统中同样没有这么一个路径。可见 os.path.basename() 页也是单纯进行字符串处理
整这个函数要注意的一点是返回的“基名”实际上是传入路径最后一个分隔符之后的子字符串也就是说如果最下级目录之后还有一个分隔符得到的就会是一个空字符串 os.path.basename(/ityouknow/justdopython/IAmBasename/)
3.4 os.path.dirname()
与上一个函数正好相反返回的是最后一个分隔符前的整个字符串 os.path.dirname(/ityouknow/justdopython/IAmBasename)/ityouknow/justdopython os.path.dirname(/ityouknow/justdopython/IAmBasename/)/ityouknow/justdopython/IAmBasename
3.5 os.path.split()
哈哈 实际上前两个函数都是弟弟这个函数才是老大。
函数os.path.split()的功能就是将传入路径以最后一个分隔符为界分成两个字符串并打包成元组的形式返回前两个函数os.path.dirname()和os.path.basename()的返回值分别是函数os.path.split()返回值的第一个、第二个元素。就连二者的具体实现都十分真实
def basename(p): Returns the final component of a pathname return split(p)[1]def dirname(p): Returns the directory component of a pathname return split(p)[0]
通过os.path.join()函数又可以把它们组合起来得到原先的路径。
3.6 os.path.exists()
这个函数用于判断路径所指向的位置是否存在。若存在则返回True不存在则返回False os.path.exists(.)True os.path.exists(./just)True os.path.exists(./Inexistence) # 不存在的路径False
一般的用法是在需要持久化保存某些数据的场景为避免重复创建某个文件需要在写入前用该函数检测一下相应文件是否存在若不存在则新建若存在则在文件内容之后增加新的内容。
3.7 os.path.isabs()
该函数判断传入路径是否是绝对路径若是则返回True否则返回False。当然仅仅是检测格式同样不对其有效性进行任何核验 os.path.isabs(a:/justdopython)True
3.8 os.path.isfile() 和 os.path.isdir()
这两个函数分别判断传入路径是否是文件或路径注意此处会核验路径的有效性如果是无效路径将会持续返回False。 # 无效路径 os.path.isfile(a:/justdopython)False # 有效路径 os.path.isfile(./just/plain_txt)True # 无效路径 os.path.isdir(a:/justdopython/)False # 有效路径 os.path.isdir(./just/)True
总结
本文详细介绍了与操作系统交互的os模块中一些常用的属性和函数基本可以覆盖初阶的学习和使用。有了这些功能我们已经可以写出一些比较实用的脚本了。