os模块篇(一)

专栏目录

文章目录

  • 专栏目录
  • os.name
  • os.environ
  • os.environb
  • os.chdir(path)
  • os.fchdir(fd)
  • os.getcwd()
  • os.fsencode(filename)
  • os.fsdecode(filename)
  • os.fspath(path)
  • os.getenv(key, default=None)
  • os.getenvb(key, default=None)
  • os.get_exec_path(env=None)

os.name

os.name是Python中os模块的一个属性,它表示当前操作系统的名称12。

os模块提供了多数操作系统的功能接口函数,当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作12。

os.name属性的作用12:

os.name属性是一个系统属性,它提供了当前操作系统的名称。它返回一个字符串,表示正在运行的操作系统的名称。这个属性在跨平台开发中非常有用,因为不同的操作系统可能需要不同的处理方式。

例如,对于Windows操作系统,os.name的值为’nt’,而对于Linux或macOS操作系统,os.name的值为’posix’12

os.environ

os.environ是Python中os模块提供的一个字典,它表示当前系统的环境变量1。

环境变量是在操作系统级别设置的键值对,用于配置系统行为和提供信息给正在运行的进程。os.environ的基本用法包括获取和设置环境变量的值1。

例如,获取环境变量的值:

import os
value = os.environ.get('MY_VARIABLE', 'default_value')
print(value)  # 如果MY_VARIABLE存在则打印其值,否则打印default_value

设置环境变量的值:

import os
os.environ['MY_VARIABLE'] = 'new_value'

需要注意的是,通过os.environ设置的环境变量只在当前进程中有效,不会影响到其他进程或系统级别的环境变量1。

os.environb

os.environb是Python中os模块提供的一个字节版本的环境变量映射对象1。

它类似于os.environ,但是os.environb返回的值是字节串(bytes)类型,而不是字符串(str)类型。这使得在处理二进制数据或需要以字节为单位操作环境变量时更加方便。

你可以使用os.environb来获取或设置环境变量的字节值。例如,要获取名为"MY_VARIABLE"的环境变量的字节值,可以使用以下代码:

import os
value = os.environb.get(b'MY_VARIABLE')
print(value)  # 如果MY_VARIABLE存在则打印其字节值,否则返回None

需要注意的是,通过os.environb设置的环境变量只在当前进程中有效,不会影响到其他进程或系统级别的环境变量2。

此外,os模块还提供了其他与环境变量相关的函数,如os.getenvb()和os.putenv()等,它们也可以用于获取和设置环境变量的值,但是它们返回或接受的是字节串类型的值1。

os.chdir(path)

os.chdir(path) 是 Python 的 os 模块中的一个函数,用于改变当前工作目录到指定的路径。path 参数应该是一个字符串,表示要切换到的目录的路径。

当你调用 os.chdir(path) 时,Python 解释器将当前工作目录更改为 path 指定的目录。这意味着后续的文件操作(如打开文件、读取文件等)将默认使用新的工作目录作为参考点,除非在文件路径中指定了绝对路径。

例如:

import os# 获取当前工作目录
current_dir = os.getcwd()
print("Current directory:", current_dir)# 改变工作目录
os.chdir("/path/to/new/directory")# 再次获取当前工作目录
new_dir = os.getcwd()
print("New directory:", new_dir)

在这个例子中,os.getcwd() 函数用于获取当前工作目录的路径,并且你会看到在调用 os.chdir() 之后,工作目录已经改变。

请注意,如果 path 不存在或者你没有权限访问该目录,os.chdir(path) 将引发一个 FileNotFoundError 或 PermissionError 异常。

此外,需要注意的是,os.chdir() 更改的是解释器级别的当前工作目录,这意味着它不仅会影响当前进程,还会影响由当前进程启动的任何子进程。因此,在编写脚本或程序时,要小心使用 os.chdir(),以避免在意外的地方改变工作目录。如果需要在特定上下文中改变工作目录,可以考虑使用 os.path 模块中的函数来构造绝对路径,而不是依赖于当前工作目录。

os.fchdir(fd)

os.fchdir(fd) 是 Python 的 os 模块中的一个函数,它用于改变当前进程的工作目录到与文件描述符 fd 相关联的文件所在的目录。文件描述符通常是通过调用 os.open() 或其他类似的函数获得的。

与 os.chdir(path) 不同的是,os.fchdir(fd) 使用的是文件描述符而不是文件路径来改变工作目录。这意味着你不需要知道文件所在的完整路径,只需要知道一个已经打开的文件或目录的文件描述符。

这里是一个简单的例子,展示了如何使用 os.fchdir(fd):

import os# 打开一个目录,获取其文件描述符
dir_fd = os.open('/path/to/directory', os.O_RDONLY)# 使用文件描述符改变当前工作目录
os.fchdir(dir_fd)# 现在当前工作目录已经改变,你可以进行其他操作,比如打开文件等# 记得在完成后关闭文件描述符
os.close(dir_fd)

在上面的例子中,我们首先使用 os.open() 打开了一个目录,并获取了它的文件描述符。然后,我们使用 os.fchdir() 改变了当前工作目录到这个目录。最后,我们使用 os.close() 关闭了文件描述符。

需要注意的是,os.fchdir(fd) 不会返回任何值。如果 fd 不表示一个目录或者发生了其他错误,它将引发一个 OSError 异常。

此外,由于 os.fchdir(fd) 是基于文件描述符来改变工作目录的,因此它通常用于那些需要避免使用文件路径的场景,例如当文件路径很长或者文件路径中包含不可打印的字符时。然而,它也有局限性,因为不是所有的文件描述符都可以用来改变工作目录(只有那些与目录相关联的文件描述符才可以)。

os.getcwd()

os.getcwd() 是 Python 的 os 模块中的一个函数,用于获取当前工作目录(Current Working Directory)的完整路径。当前工作目录是一个概念,指的是文件系统上当前进程所在的位置,通常用于相对路径的解析。

当你调用 os.getcwd() 时,它会返回一个字符串,表示当前工作目录的路径。这个路径通常是你的脚本或程序启动时所在的目录,除非你之后使用 os.chdir(path) 函数改变了工作目录。

例如:

import os# 获取当前工作目录
current_working_directory = os.getcwd()# 打印当前工作目录
print("Current Working Directory:", current_working_directory)

在这个例子中,current_working_directory 变量将包含脚本或程序执行时所在的目录的路径。这个路径是一个字符串,可以直接用于构造文件路径,如:

file_path = os.path.join(current_working_directory, "example.txt")

这样,file_path 将会包含 “example.txt” 文件的完整路径,该文件位于当前工作目录中。

需要注意的是,os.getcwd() 返回的路径可能因操作系统而异。在 Windows 上,路径通常使用反斜杠(\)作为分隔符,而在 Unix 和 Linux 系统上,路径使用正斜杠(/)作为分隔符。不过,Python 的 os.path 模块提供了跨平台的路径操作函数,如 os.path.join(),可以自动处理这些差异。

os.fsencode(filename)

os.fsencode(filename) 是 Python 的 os 模块中的一个函数,用于将文件名从字符串编码为字节串(bytes)。这在需要处理文件名作为字节序列(例如在某些低级别的文件操作中)时非常有用,特别是在处理那些可能包含非 ASCII 字符的文件名时。

默认情况下,os.fsencode() 使用文件系统的默认编码来编码文件名。在大多数现代系统上,这通常是 UTF-8。然而,依赖于文件系统的默认编码可能不是最佳实践,因为它可能会在不同的系统或配置之间变化。

这里是一个简单的例子,展示了如何使用 os.fsencode():

import os# 假设我们有一个包含非 ASCII 字符的文件名
filename = "我的文件.txt"# 使用 os.fsencode 将文件名编码为字节串
encoded_filename = os.fsencode(filename)# 打印编码后的文件名
print(encoded_filename)# 如果需要,你也可以将字节串解码回字符串
decoded_filename = encoded_filename.decode('utf-8')
print(decoded_filename)

在这个例子中,encoded_filename 将是一个包含 UTF-8 编码的字节串,它表示原始的文件名字符串。然后,我们可以使用 .decode(‘utf-8’) 方法将这个字节串解码回原始的字符串。

请注意,尽管 os.fsencode() 和 .decode(‘utf-8’) 通常可以相互转换,但直接依赖文件系统默认编码可能不是最佳实践。在处理文件名时,建议始终明确指定编码,以确保跨平台的兼容性。如果你知道文件名只包含 ASCII 字符,你可以使用 .encode(‘ascii’) 进行编码。否则,为了安全起见,最好使用 .encode(‘utf-8’)。

os.fsdecode(filename)

字节串通常是通过 os.fsencode() 函数编码得到的。os.fsdecode() 的主要作用是处理那些以字节形式表示的文件名,并将它们转换回字符串形式,以便在 Python 中更方便地处理。

os.fsdecode() 函数使用文件系统的默认编码来解码字节串。在大多数情况下,这意味着它将使用 UTF-8 编码,这是现代文件系统中最常用的编码方式。

这里是一个使用 os.fsdecode() 的例子:

import os# 假设我们有一个字节串形式的文件名
encoded_filename = b'我的文件.txt'# 使用 os.fsdecode 将字节串解码为字符串
decoded_filename = os.fsdecode(encoded_filename)# 打印解码后的文件名
print(decoded_filename)

在这个例子中,encoded_filename 是一个包含 UTF-8 编码的字节串,它代表一个包含非 ASCII 字符的文件名。os.fsdecode() 函数将这个字节串解码为相应的字符串,并将其存储在 decoded_filename 变量中。

与 os.fsencode() 类似,os.fsdecode() 也是依赖于文件系统的默认编码。尽管这在大多数情况下是可行的,但依赖默认编码可能不是最佳实践,因为它可能会在不同的系统或配置之间变化。在需要处理可能包含非标准编码的文件名时,最好明确指定编码方式,如使用 .decode(‘utf-8’)。

总结来说,os.fsdecode() 是 os.fsencode() 的逆操作,用于将字节串形式的文件名解码为字符串,以便在 Python 程序中使用。

os.fspath(path)

os.fspath(path) 是 Python 的 os 模块中的一个函数,用于将给定的 path 对象转换为一个表示文件系统路径的字符串。这个函数通常用于确保一个对象可以被安全地传递给那些期望接收文件路径字符串的函数或方法。

os.fspath() 接受一个参数 path,该参数应该是一个实现了 fspath() 方法的对象。在 Python 中,一些内置类型(如 str, bytes, 和 os.PathLike 对象)以及用户自定义的类型可能已经实现了这个方法。如果一个对象没有实现 fspath() 方法,os.fspath() 将会抛出一个 TypeError。

fspath() 方法应该返回一个表示文件系统路径的字符串或字节串。如果返回的是字节串,它应该使用文件系统的默认编码。

os.fspath() 的主要用途是在处理可能不是字符串或字节串的路径对象时提供一个统一的接口。例如,pathlib 模块中的 Path 对象就实现了 fspath() 方法,因此可以直接传递给期望字符串路径的函数,如 os.open(),通过先使用 os.fspath() 转换。

下面是一个使用 os.fspath() 的例子:

import os
from pathlib import Path# 创建一个 pathlib.Path 对象
path = Path('example.txt')# 使用 os.fspath() 将其转换为字符串路径
string_path = os.fspath(path)# 打印转换后的字符串路径
print(string_path)# 现在可以将这个字符串路径传递给其他需要字符串路径的函数
with open(string_path, 'r') as file:content = file.read()print(content)

在这个例子中,path 是一个 Path 对象。通过使用 os.fspath(),我们将其转换为一个普通的字符串路径,然后可以像往常一样使用这个字符串路径来打开文件。

os.getenv(key, default=None)

os.getenv(key, default=None) 是 Python 的 os 模块中的一个函数,用于从环境变量中获取指定键的值。这个函数非常有用,因为它允许你在 Python 脚本中访问操作系统级别的环境变量。

函数接受两个参数:

  • key:这是你想要检索的环境变量的键(或名称)。
  • default(可选):如果指定的键不存在于环境变量中,则返回这个默认值。如果未指定默认值,并且键不存在,则函数返回 None。

下面是一个使用 os.getenv() 的简单例子:

import os# 尝试获取名为 'MY_ENV_VAR' 的环境变量的值
value = os.getenv('MY_ENV_VAR')# 如果环境变量存在,打印它的值
if value is not None:print('MY_ENV_VAR:', value)
else:print('MY_ENV_VAR is not set')# 尝试获取一个可能不存在的环境变量,并提供一个默认值
default_value = 'default_value'
value_or_default = os.getenv('SOME_OTHER_VAR', default_value)# 打印变量的值或默认值
print('SOME_OTHER_VAR:', value_or_default)

在这个例子中,我们首先尝试获取名为 MY_ENV_VAR 的环境变量的值。如果该环境变量存在,我们就打印出它的值;如果不存在,我们就打印出一条消息说该环境变量未设置。

接下来,我们尝试获取一个可能不存在的环境变量 SOME_OTHER_VAR,并提供了一个默认值 default_value。如果 SOME_OTHER_VAR 不存在,os.getenv() 将返回我们提供的默认值,这样我们就可以避免 None 值,并确保始终有一个值可以使用。

os.getenv() 在处理可能不存在的环境变量时非常有用,因为它允许你为缺失的键提供一个备选值,而不是让代码因为 KeyError 异常而中断。

os.getenvb(key, default=None)

在 Python 的 os 模块中,实际上并不存在一个名为 os.getenvb 的函数。您可能是在询问 os.getenv 函数与二进制数据(bytes)的关系。

os.getenv 函数通常用于获取环境变量的值,它返回的是一个字符串(str)类型的值。如果环境变量的值包含非 ASCII 字符,并且您想要以字节(bytes)类型来处理它们,您可能需要对返回的字符串进行编码。

例如,如果您想要以 UTF-8 编码获取环境变量的字节表示,您可以这样做:

import os# 假设我们有一个包含非 ASCII 字符的环境变量
key = 'MY_ENV_VAR_WITH_NON_ASCII'# 使用 os.getenv 获取环境变量的字符串表示
value_str = os.getenv(key)# 如果值存在,将其编码为 UTF-8 字节串
if value_str is not None:value_bytes = value_str.encode('utf-8')
else:value_bytes = None# 现在您可以使用 value_bytes 进行进一步的处理
if value_bytes is not None:print('Environment variable as bytes:', value_bytes)
else:print('Environment variable not set or could not be encoded.')

在上面的例子中,如果环境变量 MY_ENV_VAR_WITH_NON_ASCII 存在并且包含非 ASCII 字符,value_str.encode(‘utf-8’) 会将其转换为 UTF-8 编码的字节串。

需要注意的是,如果您想要确保获取的是字节串而不是字符串,您应该在设置环境变量时就已经确保它是字节串,或者在调用 os.getenv 后立即进行编码转换。通常,环境变量是以字符串形式存储和传递的,因此转换为字节串是一个显式的操作。

os.get_exec_path(env=None)

os.get_exec_path(env=None) 是 Python 的 os 模块中的一个函数,它返回一个列表,其中包含了在给定的环境变量 env 中可用于执行外部程序的目录路径。

如果 env 参数是 None 或者未指定,那么函数会使用当前进程的环境。

返回的列表中的路径是按顺序排列的,这个顺序反映了在查找可执行文件时将会尝试的路径顺序。例如,当你尝试运行一个命令(如 os.system(‘some_command’) 或 subprocess.run([‘some_command’]))时,操作系统会在这些目录中查找 some_command 可执行文件。

这个函数通常在你需要知道操作系统在哪里查找可执行文件,或者当你想要影响 subprocess 模块查找可执行文件的行为时很有用。

下面是一个简单的例子,展示了如何使用 os.get_exec_path() 函数:

import os# 获取当前进程的环境变量中用于执行外部程序的目录路径
exec_paths = os.get_exec_path()# 打印这些路径
for path in exec_paths:print(path)# 如果你想在一个不同的环境变量集合中查找执行路径,你可以传递一个环境字典
# 例如:
env = os.environ.copy()
# 修改环境变量(这只是一个例子,通常你不会真的想要这么做)
env['PATH'] = '/some/other/path'other_exec_paths = os.get_exec_path(env=env)# 打印这些路径
for path in other_exec_paths:print(path)

在这个例子中,我们首先获取了当前进程的环境变量中用于执行外部程序的目录路径,并打印了它们。然后,我们创建了一个环境变量的拷贝,修改了 PATH 环境变量,并使用这个修改后的环境变量集合获取了执行路径。这展示了如何通过修改环境变量来影响 os.get_exec_path() 的行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库SQL语句速查手册

SQL 语句语法AND / ORSELECT column_name(s) FROM table_name WHERE condition AND|OR conditionALTER TABLEALTER TABLE table_name ADD column_name datatypeorALTER TABLE table_name DROP COLUMN column_nameAS (alias)SELECT column_name AS column_alias FROM table_name…

AiEditor AI富文本编辑器

AI 时代,AIGC 正在蓬勃发展。作为一家 CMS 厂商,我们也正在积极寻求下一代 CMS 的迭代方向,以适应即将到来的新时代。 CMS 的一个核心能力是对 C(Content) 的编辑能力,它是通过 "编辑器" 来体现的…

基于springboot实现房屋租赁系统项目【项目源码+论文说明】

基于springboot实现房屋租赁系统演示 摘要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高,成本…

AWS创建IAM用户,以及通过IAM用户登录

基本概念: IAM Identity Center(AWS SSO) 跨账户访问:IAM Identity Center允许用户使用他们自己的单一登录凭证来访问多个AWS账户和应用程序。这意味着你可以拥有一个账户和密码,通过IAM Identity Center的用户门户&…

基于STM32的武警哨位联动报警系统设计,支持以太网和WIFI通信

1.功能 本文提出的武警报警信息系统终端,可实现报警和联动响应,支持以太网和WIFI两种通信模式,可实现移动哨位报警和固定哨位报警,语音和显示报警信息用户可自行定制。 本终端主要由STM32F103处理器模块和C8051F340处理器模块构…

路径规划——搜索算法详解(五):Dynamic A Star(D*)算法详解与Matlab代码

昨天休息了一天,今天继续学习搜索算法!前几天已经分别介绍了Dijkstra算法、Floyd算法、RRT算法、A*算法,无独有偶,上述算法都只适用于静态环境下两点规划的场景,但是大部分场景是实时变化的,这对规划算法提…

2. 结构体内存对齐

2. 结构体内存对齐 2.1 对齐规则2.2 为什么存在内存对齐?2.3 修改默认对齐数 掌握了结构体的基本使用了。 现在我们深⼊讨论⼀个问题:计算结构体的大小。 这也是⼀个特别热门的考点: 结构体内存对齐 2.1 对齐规则 首先得掌握结构体的对齐规则&#xff…

【附升级gpt4.0方案】探索人工智能在医疗领域的革命

随着科技的飞速发展,人工智能已经逐渐渗透到了各个领域,其中医疗领域更是受益匪浅。本文将探讨人工智能在医疗领域的应用及其带来的革命性影响。 1. 人工智能辅助诊断 在医学诊断中,准确性至关重要。传统的诊断方法往往依赖于医生的经验和知…

服务器永久运行jar包(linux系统)

前言 在上篇博客里已经写了永久运行jar包的命令,但是有可能这个命令没有生效,所以再写一篇详细一点的,也是本人的踩坑经历。 再贴一次永久运行jar包命令 nohup java -jar 文件名 > 日志文件名 2>&1 &报错及检查 输入命令后…

Linux|如何管理多个Git身份

摘要 关于如何管理不同项目和多个Git身份。 作为一名通用软件开发者,我经常发现自己在处理各种各样的项目,每个项目都有自己的要求和期望。这包括为个人、工作和客户项目管理不同的Git身份。以下是我组织Git仓库以简化这一过程的方法。 目录组织 我将我的…

order by field mysql按照查询条件进行排序和统计一个字段中每个不同数值出现的次数

1.比如学生表 如何显示查询结果的顺序根据放置的顺序查询 <select id"selectNames" resultType"Student">select * from student_table where 11<if test"studentList! null">and name in<foreach item"item" ind…

【应用笔记】LAT1413+快速开关蓝牙导致设备无广播

1. 问题背景 客户使用 BlueNRG-345MC 开发了一个 BLE 外设&#xff0c;和手机连接。在测试中发现&#xff0c;手机连接上外设之后&#xff0c;不断地在手机上点击蓝牙的开关按钮&#xff0c;造成设备不断地断开、重连&#xff1b;少则几次&#xff0c;多则几十次。点击之后&am…

乐乐音乐鸿蒙版-支持krc歌词(动感歌词、翻译和音译歌词)

简介 乐乐音乐主要是基于HarmonyOS开发的音乐播放器&#xff0c;它支持lrc歌词和动感歌词(ksc歌词、krc歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 开发环境 ArkTS、Stage模型、SDK3.1、 API 9 注&#xff1a;没试过在真机条件下调试。 功…

uni-app项目不显示<uni-icons></uni-icons>以及其他uni-开头的组件

/package.json {"dependencies": {"dcloudio/uni-ui": "^1.4.27", //加这个} } /pages.json //根节点下加这个 "easycom": {"autoscan": true,"custom": {// uni-ui 规则如下配置"^uni-(.*)": "d…

LLM大模型可视化-以nano-gpt为例

内容整理自&#xff1a;LLM 可视化 --- LLM Visualization (bbycroft.net)https://bbycroft.net/llm Introduction 介绍 Welcome to the walkthrough of the GPT large language model! Here well explore the model nano-gpt, with a mere 85,000 parameters. 欢迎来到 GPT 大…

什么是数据结构

一、什么是数据结构 1.数据结构研究计算机数据间的关系 2.包括数据的逻辑结构和储存结构及其操作 数据的逻辑结构&#xff1a;表示数据运算之间的抽象关系 按每个元素可能具有的直接前趋数和后继数将逻辑结构分为“线性结构”和“非线性结构”两大类 数据的储存结构&#…

huggingface 常见函数/类

目录 一、trainer保存模型的问题 1.1、在trainer训练时&#xff0c;怎么控制模型保存的数量的同时&#xff0c;还可以保存最优的模型参数呢&#xff1f; 1.2、使用trainer与deepspeed ZeRO3时&#xff0c;怎么保存模型为huggingface格式呢&#xff1f; 二、 huggingface PreTr…

【JavaSE】初识线程,线程与进程的区别

文章目录 ✍线程是什么&#xff1f;✍线程和进程的区别✍线程的创建1.继承 Thread 类2.实现Runnable接口3.匿名内部类4.匿名内部类创建 Runnable ⼦类对象5.lambda 表达式创建 Runnable ⼦类对象 ✍线程是什么&#xff1f; ⼀个线程就是⼀个 “执行流”. 每个线程之间都可以按…

【JavaWeb】Day24.Web入门——SPringBootWeb入门

什么是SPring&#xff1f; 我们可以打开Spring的官网(Spring | Home)&#xff0c;去看一下Spring的简介&#xff1a;Spring makes Java simple。Spring的官方提供很多开源的项目&#xff0c;我们可以点击上面的projects&#xff0c;看到spring家族旗下的项目&#xff0c;按照流…

mobaxterm访问服务器tensorboard方法

参考&#xff1a;mobaxterm访问服务器tensorboard &#xff08;1&#xff09;在服务器端运行 tensorboard --logdir‘/home/zzz/…’ --port 6007命令 其中&#xff0c;logdir参数指定了events.out.tfevents文件所在的路径&#xff0c;port参数指定了端口号&#xff0c;默认是…