通过示例学习在 Python 中使用 os 模块

通过示例学习在 Python 中使用 os 模块

Python os 模块是操作系统的瑞士军刀,让你可以通过Python访问文件、目录和其他操作系统功能。该模块充当你的Python代码和操作系统处理其文件系统的专有桥梁。

它也是一个可移植模块,这意味着无论你是在 Windows、Mac OSX 还是 Linux 上运行 Python 代码,只要操作系统支持该功能,你都可以使用相同的方法并获得相同的结果。如果操作系统不支持某个方法,则会引发 OSerror。

这个模块有很多功能。你可以使用它来获取当前目录的路径、获取该目录中文件和文件夹的名称、更改目录、删除目录等等。了解如何使用此模块的最佳方法是通过真实 Python 代码示例.

因此,请打开你的 Python IDE 并自己尝试其中的一些示例。

带有示例的 Python os 模块方法

获取使用 os.name 导入的操作系统模块的名称

虽然你可能认为此属性会告诉你运行 Python 代码的操作系统的名称,但事实并非如此。相反,它返回一个字符串,该字符串是 os 模块使用的 Python 模块的名称。

例如:

# 导入 os 模块
import os
# 打印名称
print(os.name) # 将在 Mac 和 Linux 上打印“posix”,在 Windows 上打印“nt”

使用 os.environ 获取所有环境变量

这个 os 模块方法列出了你的 Python 代码正在执行的环境的所有当前环境变量。

例如:

# 导入 os 模块
import os
# 打印环境变量
print(os.environ)

此脚本的结果可能非常冗长,具体取决于你环境中变量的数量。这是示例的一部分:

environ({'TERM_PROGRAM': 'vscode', 'ANDROID_HOME': '/Users/myUser/Library/Android/sdk', 'TERM': 'xterm-256color', 'SHELL': '/bin/sh', ...

使用 os.getenv() 获取特定环境

如果你只需要从 Python 脚本中访问一个或两个环境变量,则直接使用上面的方法可能有点过头了。使用 os.getenv(),你可以获取特定的环境变量,并在未找到该变量时为该值设置默认值。

# 导入os模块
import os
# 获取环境变量
shell = os.getenv('SHELL', '/bin/fish')
# 打印环境变量
print(shell) # 如果没有设置SHELL,会打印/bin/fish

使用 os.getcwd() 获取当前工作目录

当前工作目录或 CWD 是 Python 当前正在执行的文件夹。当你按名称执行 Python 文件时,没有目录路径,Python 解释器假定你要查找的文件位于当前工作目录中。

这是一个使用它的简单示例:

# 导入os模块
import os
# 获取当前工作目录
cwd = os.getcwd()
# 打印当前工作目录
print("Current working directory: {}".format(cwd))

getcwd() 函数返回一个字符串,其中包含你正在执行 Python 代码的目录的路径,因此上面的代码将打印类似“当前工作目录:/Users/myUser/Projects/python-code/”的内容。

使用 os.chdir() 更改当前工作目录

如果你编写了一个处理文件的 Python 脚本,并且这些文件位于完全不同的目录中,你可能会发现此方法很有用。它使你可以将当前工作目录切换到另一个文件夹。

这是一个例子:

# 导入os模块
import os
# 打印当前工作目录
print(os.getcwd())
# 改变当前工作目录
os.chdir('../')
# 打印当前工作目录
print(os.getcwd ())

正如你在上面的代码中看到的,你不必指定文件的整个路径。你也可以使用相对路径。此代码会将当前工作目录上移一个文件夹,结果如下所示:

/Users/myUser/Projects/python-code/
/Users/myUser/Projects/

Python课程推荐

通过示例学习在 Python 中使用 os 模块

【Udemy高分课程 + 中英文双字幕】

Python圣经™ | 用 Python 编程所需的一切

使用 os.path.join() 正确创建文件路径

join() 方法可让你根据操作系统的规则正确连接一个或多个路径。虽然你有可能通过编写自己的函数来连接路径来获得正确的路径,但 join() 在你使用的任何操作系统上都能正常工作。

这是一个例子:

# 导入 os 模块
import os
# 获取当前工作目录
cwd = os.getcwd()
# 当前工作目录下的子文件夹
new_folder = 'new_folder'
path = os.path.join(cwd, new_folder)
# 打印目录
print( f"已创建目录: {path}")

在 Mac OSX 或 Linux 中,这会打印类似于“/Users/myUser/new_folder”的内容。在 Windows 中,它会使用反斜杠并且看起来更像“C:\Users\myUser\new_folder”。

使用 os.mkdir() 创建一个新目录

Python 中的此方法允许你使用特定的数字模式创建新目录。如果你尝试创建一个已经存在的目录,该方法将引发 FileExistsError。

这是一个例子:

# 导入 os 模块
import os
# 获取当前工作目录
cwd = os.getcwd()
# 新建文件夹名称
new_folder_name = 'new_folder'
# 创建完整目录路径
path = os.path.join(cwd, new_folder_name)
# 创建directory
os.mkdir(path)
print("Directory {} created".format(path))

mkdir() 方法接受的第一个参数是你将要创建的目录的完整路径。上面的代码将当前工作目录连接到新文件夹名称以获取此值,并在此代码运行的目录中创建一个“new_folder”文件夹。mkdir() 方法还接受一个可选的第二个参数,即创建目录的模式。一些操作系统不接受这个值.此外,如果路径中的任何目录不存在,则会引发 FileExistsError,并且不会创建该文件。在这种情况下,你可能希望使用下一个示例中的代码。

使用 os.makedirs() 递归创建新目录

此方法与上一个方法一样工作,只是它会创建任何在你创建目录时不存在的中间目录。

例如:

# 导入 os 模块
import os
# 获取当前工作目录
cwd = os.getcwd()
# 新建文件夹路径。这些都不存在,但将被创建。
new_path = 'new_folder1/new_folder2'
# 创建全目录路径
path = os.path.join(cwd, new_path)
# 创建目录
os.makedirs(path)
print("Directory {} created".format(path))

使用 os.listdir() 列出目录和文件

os.listdir() 方法接受文件路径并返回该路径中的文件和文件夹的列表。path 参数是可选的,如果未设置,该方法将列出当前工作目录中的文件和文件夹。

这是一个例子:

# 导入os模块
import os
# 获取根目录下文件和文件夹的列表
path = '/'
dir_list = os.listdir(path)
# 打印列表
print(dir_list)

运行此脚本的结果如下所示:

['home','usr','.DS_Store','bin','sbin','.file','etc','var','Library','System','.VolumeIcon.icns', '.fseventsd'、'private'、'.vol'、'Users'、'Applications'、'opt'、'dev'、'Volumes'、'tmp'、'cores']

Python网络开发课程

通过示例学习在 Python 中使用 os 模块

【Udemy高分课程 + 中英文双字幕】

Django 4 Masterclass 2022:从开发到部署

使用 os.remove() 删除文件

os.remove() 方法删除操作系统中的文件,但不能删除目录。如果你尝试使用它删除目录,该方法将引发 OSerror。

例如:

# 导入os模块
import os
# 设置文件名
file_name = 'my_file.txt'
# 设置文件所在
directory = '/Users/myUser/Projects/python-code/'
# 创建全路径
path = os .path.join(directory, file_name)
# 删除文件
os.remove(path)

使用 os.rmdir() 删除目录

要在 Python 中删除目录,请使用 os.rmdir()。这仅适用于空目录。如果目录包含文件或文件夹,则该方法会引发 OSerror。

例子:

# 导入os模块
import os
# 设置要删除的目录
file_name = 'my_directory'
# 设置父目录路径
directory = '/Users/myUser/Projects/python-code/'
# 创建全路径
path = os.path.join(directory, file_name)
# 删除目录
os.rmdir(path)

使用 os.walk() 迭代目录中的文件名

此方法通过以自上而下或自下而上的方式遍历目录结构,在目录树中生成文件名。

这是此方法的语法:

os.walk(top, topdown=True, onerror=None, followlinks=False)

第一个参数是步行开始的路径,并且是唯一必需的参数。默认情况下,它会进行自上而下的遍历,你可以通过将第二个参数设置为 False 来进行自下而上的遍历。你可以将第三个参数设置为将在错误发生时处理错误的函数。如果你将第四个参数设置为 true,它将遵循符号链接,默认情况下不会这样做。该方法返回一个包含目录路径、目录名和文件名列表的 3 元组。

例子:

# 导入 os 模块
import os
# 获取当前工作目录
cwd = os.getcwd()
# 列出
os.walk(cwd) 中的 dirpath、dirnames、filenames 的详细信息:
 print(dirpath)
 print(dirnames)
 print(filenames)

使用 os.walk() 可以做很多事情。有关详细信息,请访问该方法的官方文档

使用 os.popen() 打开和管道文件或目录

os.popen() 方法打开与命令之间的管道。它返回一个连接到管道的打开文件对象,可以根据打开的模式读取或写入。这是此方法的语法:

os.popen(cmd, mode='r', buffering=-1)

打开文件的默认模式是只读。以下是你可以使用的其他值:

  • r:打开一个文件进行读取。
  • r+:打开一个文件进行读写。
  • w : 打开一个只用于写入的文件。如果文件存在,则覆盖文件。如果文件不存在,它会创建一个新文件进行写入。
  • w+:打开一个文件进行读写。如果文件存在,则覆盖现有文件。如果该文件不存在,则创建一个新文件进行读写。

有关更多模式以及如何使用缓冲,请阅读使用相同值的 Python 内置 open() 方法的文档。os.popen() 唯一需要的参数是第一个参数,它是你将用于管道的 shell 命令。

例子:

# 导入 os 模块
import os
# 打开管道到当前工作目录
pipe = os.popen('ls -la')
# 打印结果
print(pipe.read())

由于使用的命令是“ls -la”,这将打印当前工作目录的目录列表。

使用 os 模块处理错误

因为 Python os 模块被设计为可移植的,但是你的操作系统可能不支持你正在使用的某些方法,你将需要使用 try 和 accept 来处理可能出现的错误。这是一个示例,我们尝试使用 os.mkdir() 创建递归文件夹,但这不起作用:

# 导入 os 模块
import os
# 获取当前工作目录
cwd = os.getcwd()
# 创建嵌套文件夹
new_folder_name = 'first_folder/second_folder'
# 创建完整目录路径
path = os.path.join(cwd, new_folder_name)
# 尝试创建目录
try:
 os.mkdir(path)
 print("Directory {} created".format(path))
except FileNotFoundError:
 print('Directory already exists')

Python os 模块的其他有用方法

os 模块非常广泛,你可以使用的方法比上面示例中使用的方法更多。以下是你可以在 Python 代码中使用的其他一些方法:

  • os.path.split(path):这会将路径拆分为路径和文件名。
  • os.path.dirname(path):返回路径的目录名。
  • os.path.abspath(path):这将返回绝对路径。
  • os.path.isfile(path):当路径指向文件时返回 true,否则返回 false。
  • os.path.isdir(path):当路径指向目录时返回 true,否则返回 false。
  • os.path.exists(path):此方法确定路径是否存在。

要了解有关 Python 的更多信息,可以查看Python官网。如果你准备好培养自己的 Python 技能,口袋资源有许多 Python 课程,你可以按照自己的进度学习 Python。

如果本站的内容对你有帮助,可以点击这儿,不花一分钱捐赠本站

(0)
疯狂的小黑的头像疯狂的小黑
上一篇 2022年6月1日 下午8:35
下一篇 2022年7月7日 下午3:11

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

微信