赞
踩
Python os 模块是操作系统的瑞士军刀,让你可以通过Python访问文件、目录和其他操作系统功能。该模块充当你的Python代码和操作系统处理其文件系统的专有桥梁。
它也是一个可移植模块,这意味着无论你是在 Windows、Mac OSX 还是 Linux 上运行 Python 代码,只要操作系统支持该功能,你都可以使用相同的方法并获得相同的结果。如果操作系统不支持某个方法,则会引发 OSerror。
这个模块有很多功能。你可以使用它来获取当前目录的路径、获取该目录中文件和文件夹的名称、更改目录、删除目录等等。了解如何使用此模块的最佳方法是通过真实 Python 代码示例.
因此,请打开你的 Python IDE 并自己尝试其中的一些示例。
虽然你可能认为此属性会告诉你运行 Python 代码的操作系统的名称,但事实并非如此。相反,它返回一个字符串,该字符串是 os 模块使用的 Python 模块的名称。例如:
- # 导入 os 模块
- import os
- # 打印名称
- print(os.name) # 将在 Mac 和 Linux 上打印“posix”,在 Windows 上打印“nt”
这个 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', ...
如果你只需要从 Python 脚本中访问一个或两个环境变量,则直接使用上面的方法可能有点过头了。使用 os.getenv(),你可以获取特定的环境变量,并在未找到该变量时为该值设置默认值。
- # 导入os模块
- import os
- # 获取环境变量
- shell = os.getenv('SHELL', '/bin/fish')
- # 打印环境变量
- print(shell) # 如果没有设置SHELL,会打印/bin/fish
当前工作目录或 CWD 是 Python 当前正在执行的文件夹。当你按名称执行 Python 文件时,没有目录路径,Python 解释器假定你要查找的文件位于当前工作目录中。这是一个使用它的简单示例:
- # 导入os模块
- import os
- # 获取当前工作目录
- cwd = os.getcwd()
- # 打印当前工作目录
- print("Current working directory: {}".format(cwd))
getcwd() 函数返回一个字符串,其中包含你正在执行 Python 代码的目录的路径,因此上面的代码将打印类似“当前工作目录:/Users/myUser/Projects/python-code/”的内容。
如果你编写了一个处理文件的 Python 脚本,并且这些文件位于完全不同的目录中,你可能会发现此方法很有用。它使你可以将当前工作目录切换到另一个文件夹。这是一个例子:
- # 导入os模块
- import os
- # 打印当前工作目录
- print(os.getcwd())
- # 改变当前工作目录
- os.chdir('../')
- # 打印当前工作目录
- print(os.getcwd ())
正如你在上面的代码中看到的,你不必指定文件的整个路径。你也可以使用相对路径。此代码会将当前工作目录上移一个文件夹,结果如下所示:
- /Users/myUser/Projects/python-code/
- /Users/myUser/Projects/
Udemy付费课程下载 Python圣经 - The Python Bible 用 Python 编程所需的一切 - 口袋资源网独家Udemy付费课程下载,高清视频+中英文字幕+配套资料。用不到1/10的价格,享受99%的服务。Python Bible 是适合初学者的完美 Python 课程。即使您没有编程经验,也不要担心,因为这适用于像您这样的人。https://www.koudaizy.com/tutorials/the-python-bible/使用 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”。
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 模块
- 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() 方法接受文件路径并返回该路径中的文件和文件夹的列表。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']
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)
要在 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(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(cmd, mode='r', buffering=-1)
打开文件的默认模式是只读。以下是你可以使用的其他值:
有关更多模式以及如何使用缓冲,请阅读使用相同值的 Python 内置 open() 方法的文档。os.popen() 唯一需要的参数是第一个参数,它是你将用于管道的 shell 命令。这是一个例子:
- # 导入 os 模块
- import os
- # 打开管道到当前工作目录
- pipe = os.popen('ls -la')
- # 打印结果
- print(pipe.read())
由于使用的命令是“ls -la”,这将打印当前工作目录的目录列表。
因为 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')
os 模块非常广泛,你可以使用的方法比上面示例中使用的方法更多。以下是你可以在 Python 代码中使用的其他一些方法:
要了解有关 Python 的更多信息,可以查看Python官网。如果你准备好培养自己的 Python 技能,口袋资源有许多 Python 课程,你可以按照自己的进度学习 Python。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。