Python os模块完全指南:掌握文件与目录操作的利器
这是文章《Python的os模块》的第1部分(共1部分)。
Python的os模块提供了简单而强大的函数,允许我们与操作系统进行交互,获取系统信息,甚至对进程进行一定程度的控制。无论是Windows、Mac还是Linux平台,os模块都能提供一致的操作接口。
Python的os模块概述
os模块提供的功能可以让我们对底层操作系统任务进行操作,无论是Windows平台、Macintosh还是Linux都可以。在本教程中,我们将详细探讨这些功能,以及我们可以用它们做什么。让我们从这些功能和它们提供的信息开始我们的学习之旅。
如何导入os模块

在Python中使用os模块前,我们需要先导入它。导入os模块非常简单,只需使用以下代码:
import os
获取操作系统名称:os.name
os.name函数返回当前操作系统的名称。这取决于底层操作系统。目前,它支持”posix”、”os2″、”ce”、”nt”、”riscos”和”java”等标识。让我们在系统上执行这个函数看看结果:
>>> print(os.name)
posix
显然,根据运行环境的不同,这个函数会输出不同的平台标识。例如,在Windows系统上会返回”nt”,而在Linux或Mac系统上则返回”posix”。
访问环境变量:os.environ
os.environ不是一个函数,而是一个包含所有环境变量的映射对象(字典),通过它我们可以访问系统的环境变量。让我们看看示例代码片段:
import os
output = os.environ['HOME']
print(output)

上面的代码会输出当前用户的主目录路径。在Windows系统中,你可能需要使用’USERPROFILE’代替’HOME’。
执行外部程序:os.execvp
os.execvp函数是在系统上运行其他命令的一种方式。它会用新的程序替换当前进程。让我们来看看这个函数的示例代码片段:
import os
program = "python"
arguments = ["hello.py"]
print(os.execvp(program, (program,) + tuple(arguments)))
为了运行上面的代码,我们需要创建一个名为hello.py的示例脚本,代码如下:
print('Hello')

注意:execvp函数会替换当前进程,所以它之后的代码不会被执行,除非execvp调用失败。
获取用户ID:os.getuid
os.getuid函数返回当前进程的用户ID(UID)。这个函数在Unix-like系统上可用,但在Windows系统上不可用。
>>> os.getuid()
501
所以,当前进程的用户ID是501。注意,这是用户ID,不是进程ID。
重命名文件:os.rename
通过Python的os.rename函数,我们可以轻松地重命名文件或目录。
import os
fileDir = "JournalDev.txt"
os.rename(fileDir, 'JournalDev_Hi.txt')
请注意,要执行此操作,我们的脚本必须具有相应的文件系统权限。如果目标文件名已存在,在某些系统上可能会引发异常。
执行系统命令:os.system
Python的os.system函数允许我们在Python脚本中运行系统命令,就像在终端中运行一样。例如:
import os
currentFiles = os.system("users > users.txt")

上面的代码会将当前登录用户的信息重定向到users.txt文件中。os.system返回命令的退出状态码,通常为0表示成功执行。
处理操作系统错误:OSError
Python的OSError是与操作系统相关错误的基类,包括I/O错误。因此,我们可以在except子句中使用OSError来捕获这些错误。
import os
try:
f = open('abc.txt', 'r') # 文件不存在
except OSError:
print('发生错误')
当尝试打开不存在的文件时,会引发OSError异常,然后被except块捕获并打印错误信息。
获取进程ID:os.getpid
os.getpid函数返回当前进程的ID(PID)。
>>> os.getpid()
71622
所以,当前进程的ID是71622。注意,这是进程ID,不是用户ID。
列出目录内容:os.listdir
os.listdir函数列出指定目录中的文件和子目录。如果不指定路径,则默认为当前工作目录。
>>> import os
>>> os.listdir()
['.DS_Store', '.localized', 'JournalDev', 'Java', 'Python']
该函数返回一个包含目录和文件名的列表,该列表是可迭代的。列表中的顺序取决于文件系统。
获取系统信息:os.uname
os.uname函数返回包含当前操作系统详细信息的对象。这个函数在Unix-like系统上可用,但在Windows系统上不可用。
>>> os.uname()
posix.uname_result(sysname='Darwin', nodename='Shubham.local', release='17.2.0', version='Darwin Kernel Version 17.2.0: Fri Sep 29 18:27:05 PDT 2017; root:xnu-4570.20.62~3/RELEASE_X86_64', machine='x86_64')
返回的信息包括系统名称、主机名、操作系统版本、内核版本和硬件类型等,非常详细。
os.path模块与os模块的关系
os.path在实际使用中表现得有些特殊。它看起来像是os模块的一个子模块,但实际上,os是一个普通模块,通过与sys.module配合来支持os.path。让我们来列举一下幕后发生的事情:
- 当Python启动时,它会将许多模块加载到sys.module中。
- os模块也在Python启动时被加载。它将路径相关的功能分配给特定于操作系统的模块。
- 它通过注入sys.modules[‘os.path’] = path,使你能够像导入子模块一样导入os.path。
这种设计使得os.path能够根据不同的操作系统提供适当的路径操作功能,同时保持接口的一致性。
总结
在本教程中,我们学习了Python中os模块提供的各种功能,包括获取系统信息、操作文件和目录、执行系统命令等。os模块是Python标准库中非常重要的一个模块,它为我们的程序提供了与操作系统交互的能力。通过掌握os模块的使用,我们可以编写出更加强大和灵活的Python程序。
如果你想进一步学习Python,可以参考官方API文档或其他Python教程,探索更多Python的强大功能。