os模块篇(十四)

文章目录

  • os.renames(old, new)
  • os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
  • os.rmdir(path, *, dir_fd=None)
  • os.scandir(path='.')
  • os.stat(path, *, dir_fd=None, follow_symlinks=True)
  • os.statvfs(path)

os.renames(old, new)

os.renames(old, new) 是 Python 的 os 模块中的一个函数,用于在单个操作中重命名文件或目录。这个函数尝试将 old(旧路径)指定的文件或目录重命名为 new(新路径)指定的名称。与 os.rename() 函数不同,os.renames() 在重命名过程中会处理跨文件系统的重命名,并在必要时使用临时文件以确保数据的完整性。

参数:

  • old:源文件或目录的当前路径(字符串类型)。
  • new:源文件或目录的新路径(字符串类型)。

os.renames() 函数会尝试将 old 路径指定的文件或目录重命名为 new 路径。如果 old 和 new 路径位于不同的文件系统中,os.renames() 将使用一种安全的方式来完成重命名操作,这通常涉及到创建一个临时文件,然后将临时文件重命名为新名称,最后删除原始文件。这样可以确保在重命名过程中数据的完整性和安全性。

如果重命名操作成功,os.renames() 函数将返回 None。如果发生错误,例如源文件不存在或目标文件已存在,将引发 OSError 异常。

下面是一个使用 os.renames() 函数的例子:

import os# 指定要重命名的文件或目录的当前路径
old_path = '/path/to/old_file.txt'
# 指定文件或目录的新路径
new_path = '/path/to/new_file.txt'try:# 重命名文件或目录os.renames(old_path, new_path)print(f"File or directory '{old_path}' has been renamed to '{new_path}' successfully.")
except OSError as e:print(f"An error occurred while renaming: {e}")

在这个例子中,我们尝试将名为 old_file.txt 的文件或目录重命名为 new_file.txt。如果重命名操作成功,将打印一条消息确认重命名已完成。如果发生错误,将捕获 OSError 异常并打印错误详情。

需要注意的是,由于 os.renames() 在必要时会使用临时文件来确保数据完整性,因此它可能比简单的 os.rename() 函数要慢一些,尤其是在跨文件系统重命名时。然而,这种额外的复杂性通常只在处理重要文件或需要保证数据完整性的情况下才是必要的。

os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None) 是 Python 3.8 中新增的一个函数,用于替换文件或目录。它的行为类似于 os.rename(src, dst),但有一个重要的区别:如果目标路径 dst 已经存在,os.replace() 会先删除它,然后再将 src 重命名为 dst。这意味着它允许你在不重命名 src 的情况下覆盖一个已存在的文件或目录。

参数:

  • src:源文件或目录的路径(字符串类型)。
  • dst:目标路径,即要替换为 src 的文件或目录的路径(字符串类型)。
  • src_dir_fd:可选参数,表示已打开的文件描述符,它指向包含 src 的目录。
  • dst_dir_fd:可选参数,表示已打开的文件描述符,它指向要替换的 dst 的目录。

如果 src_dir_fd 或 dst_dir_fd 被指定,那么 src 和 dst 应该是相对于各自文件描述符的路径。

返回值:

None:如果替换成功,则函数返回 None。

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

import os# 源文件路径
src_path = 'old_file.txt'
# 目标文件路径
dst_path = 'new_file.txt'try:# 替换文件os.replace(src_path, dst_path)print(f"File '{src_path}' has been replaced with '{dst_path}'")
except FileNotFoundError:print(f"File '{src_path}' does not exist.")
except PermissionError:print(f"Permission denied while trying to replace '{src_path}' with '{dst_path}'")
except OSError as e:print(f"An error occurred: {e}")

在这个例子中,我们尝试用 old_file.txt 替换 new_file.txt。如果 new_file.txt 已经存在,它会被删除,然后 old_file.txt 会被重命名为 new_file.txt。如果操作成功,会打印一条消息确认替换已完成。如果发生错误,会捕获异常并打印相应的错误信息。

需要注意的是,由于 os.replace() 在替换时会先删除目标文件,因此如果源文件和目标文件位于不同的文件系统中,它可能会失败,因为跨文件系统移动文件通常需要特殊的权限。此外,如果源文件不存在,或者没有权限删除或重命名文件,也会引发异常

os.rmdir(path, *, dir_fd=None)

os.rmdir(path, *, dir_fd=None) 是 Python 的 os 模块中的一个函数,用于删除一个空目录。这意味着它只能删除那些不包含任何文件或其他子目录的目录。如果目录不为空,os.rmdir() 将引发 OSError 异常。

参数:

  • path:要删除的目录的路径(字符串类型)。
  • dir_fd:一个可选参数,表示一个已经打开的文件描述符,它指向包含要删除目录的父目录。如果提供了 dir_fd,则 path 应该是相对于该目录的描述符的路径。

dir_fd 参数在 Python 3.4 版本中引入,它允许你通过文件描述符而不是文件名来指定目录。这在某些高级文件操作中可能很有用,比如当你已经有一个打开的文件描述符指向目录时。

返回值:

  • None:如果目录成功删除,则函数返回 None。

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

import os# 要删除的目录路径
dir_path = 'empty_directory'try:# 删除目录os.rmdir(dir_path)print(f"Directory '{dir_path}' has been removed successfully.")
except OSError as e:print(f"An error occurred while trying to remove the directory: {e}")

在这个例子中,我们尝试删除名为 empty_directory 的目录。如果该目录确实为空,它将被成功删除,并打印一条确认消息。如果目录不为空或发生其他错误,将捕获 OSError 异常并打印错误详情。

需要注意的是,os.rmdir() 仅适用于空目录。如果你想删除一个可能包含文件或其他子目录的目录,你应该使用 shutil.rmtree() 函数,这个函数能够递归地删除整个目录树。然而,使用 shutil.rmtree() 时要小心,因为它不会询问你是否确定要删除目录和其中的所有内容。

os.scandir(path=‘.’)

os.scandir(path=‘.’) 是 Python 的 os 模块中的一个函数,用于在目录树中迭代文件或目录的入口(entries)。os.scandir() 返回一个迭代器,它会产生每个在给定路径中的文件和子目录的 os.DirEntry 对象。

参数 path 指定了要扫描的目录的路径。默认值是 ‘.’,表示当前目录。

os.DirEntry 对象包含有关目录条目的信息,如名称、是否是一个目录、文件大小等。你可以使用 os.DirEntry 的方法(如 is_dir(), is_file(), stat() 等)来获取这些信息。

使用 os.scandir() 比使用 os.listdir() 通常更高效,因为 os.scandir() 提供了更底层的接口,并且只在需要时才从文件系统中检索信息。

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

import os# 扫描当前目录
for entry in os.scandir('.'):# 判断是文件还是目录if entry.is_dir():print(f"{entry.name} 是一个目录")elif entry.is_file():print(f"{entry.name} 是一个文件")# 你可以进一步使用 entry.stat() 来获取文件的详细信息# 如果你只想获取目录中的文件(不包括子目录中的文件),可以使用 os.walk()
for root, dirs, files in os.walk('.'):for file in files:print(os.path.join(root, file))

在这个例子中,我们遍历了当前目录(.)中的所有文件和目录,并打印出它们的名称以及它们是文件还是目录。

需要注意的是,os.scandir() 在 Python 3.5 及更高版本中可用。如果你使用的是更早的 Python 版本,你可能需要使用 os.listdir() 结合 os.path.isdir() 和 os.path.isfile() 来达到类似的效果,但效率可能会较低。

os.stat(path, *, dir_fd=None, follow_symlinks=True)

os.stat(path, *, dir_fd=None, follow_symlinks=True) 是 Python 中 os 模块的一个函数,用于获取文件或文件系统的状态信息。它返回一个 os.stat_result 对象,该对象包含有关指定路径的文件或目录的详细信息。

参数:

  • path:要获取状态信息的文件或目录的路径(字符串类型)。
  • dir_fd:一个可选参数,表示一个已经打开的文件描述符,它指向包含要查询的文件或目录的目录。如果提供了 dir_fd,则 path 应该是相对于该目录的描述符的路径。
  • follow_symlinks:一个可选的布尔值参数,默认为 True。如果为 True,并且 path 是一个符号链接,os.stat() 将返回符号链接指向的实际文件或目录的信息。如果为 False,则返回符号链接本身的信息。

返回值:

  • os.stat_result:一个命名元组,包含以下属性(这些属性可能因操作系统而异):
    • st_mode:文件模式(权限和类型)。
    • st_ino:文件的 inode 号。
    • st_dev:文件所在的设备号。
    • st_nlink:文件的硬链接数。
    • st_uid:文件的用户 ID。
    • st_gid:文件的组 ID。
    • st_size:文件大小(字节数)。
    • st_atime:最后一次访问时间。
    • st_mtime:最后一次修改时间。
    • st_ctime:文件元数据(如权限或所有权)最后一次更改的时间。

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

import os
import time# 文件路径
file_path = 'example.txt'try:# 获取文件状态信息stat_info = os.stat(file_path)# 输出文件信息print(f"File mode: {stat_info.st_mode}")print(f"File size: {stat_info.st_size} bytes")print(f"Last modified time: {time.ctime(stat_info.st_mtime)}")except FileNotFoundError:print(f"File '{file_path}' not found.")
except OSError as e:print(f"An error occurred: {e}")

在这个例子中,我们获取了名为 example.txt 的文件的状态信息,并打印了文件的模式、大小和最后修改时间。如果文件不存在或发生其他错误,会捕获相应的异常并打印错误消息。

注意:os.stat() 返回的信息可能因操作系统而异,并且不是所有属性在所有平台上都可用。因此,在编写跨平台的代码时,建议检查属性是否存在,或者考虑使用更高级的库(如 shutil、pathlib),这些库提供了更一致和方便的接口来处理文件和目录。

os.statvfs(path)

os.statvfs(path) 是 Python 的 os 模块中的一个函数,用于获取文件系统的状态信息。它返回一个 os.statvfs_result 对象,该对象包含了关于指定路径所在文件系统的信息,如总空间、可用空间、已使用的空间等。

参数:

  • path:一个字符串,表示要查询的文件系统或挂载点的路径。

返回值:

  • os.statvfs_result:一个命名元组,包含以下属性:
    • f_bsize:文件系统块的大小(以字节为单位)。
    • f_frsize:基础文件系统块的大小(以字节为单位)。
    • f_blocks:文件系统中数据块的总数。
    • f_bfree:非特权用户可用的数据块数。
    • f_bavail:非特权用户可用的数据块数,考虑到了文件系统的保留空间。
    • f_files:文件系统中文件节点的总数。
    • f_ffree:非特权用户可用的文件节点数。
    • f_favail:非特权用户可用的文件节点数,考虑到了文件系统的保留空间。
    • f_fsid:文件系统的唯一标识符。
    • f_flag:文件系统的标志位。
    • f_namemax:文件系统中文件名的最大长度。

这些信息对于文件系统管理和监控来说是非常有用的,因为它们可以帮助你了解文件系统的空间使用情况、文件数量等。

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

import os# 获取文件系统状态信息
fs_info = os.statvfs('/')# 输出一些关键信息
print(f"Total blocks: {fs_info.f_blocks}")
print(f"Free blocks: {fs_info.f_bfree}")
print(f"Available blocks: {fs_info.f_bavail}")
print(f"Total file nodes: {fs_info.f_files}")
print(f"Free file nodes: {fs_info.f_ffree}")
print(f"Available file nodes: {fs_info.f_favail}")
print(f"Maximum file name length: {fs_info.f_namemax}")

在这个例子中,我们获取了根目录(/)所在文件系统的状态信息,并打印了一些关键指标,如总块数、可用块数、文件节点数等。这些信息对于评估文件系统的容量和使用情况非常有帮助。

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

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

相关文章

一些常见的Prometheus+Grafana问题和答案:

什么是Prometheus?它的主要功能是什么? Prometheus是一个开源的系统监控和报警工具。它通过收集和存储时间序列数据,提供了强大的查询语言和灵活的报警规则,可以帮助监控和分析系统的性能指标。 Prometheus的数据模型是什么样的…

LLM记录1

LLM的知识库问答有3种实现路径:RAG 或 微调,或两者结合。 RAG:低成本易部署,适用于知识会更新的场景,但知识内容多的情况下,检索成本会变高。微调:算力成本高,微调效果不稳定&#x…

全量知识系统 程序详细设计之 “起点”(递归原始版本)

原文 以下是对全知系统程序详细设计的设计起点的考虑。 关于“程序program” 数据模式--“程序”的基础--数型(构造型):数值型、数字型和数据型 。 其中, 1其程序模式--结构化或自动化(描述了“数据”的关系型rel…

【Docker笔记05】【网络模式】

一、前言 本系列是根据 B 站 尚硅谷 Docker 视频 学习记录笔记。因为没有视频课件,部分内容摘自 https://www.yuque.com/tmfl/cloud/dketq0。 本系列仅为自身学习笔记记录使用,记录存在偏差,推荐阅读原视频内容或本文参考笔记。 二、简单介…

靠谱的wordpress建站公司怎么选 建网站避坑指南

在选择WordPress建站公司时,查看其建站案例作品是非常重要的。这确实是一个可以直接反映公司实力和信誉的方面。神马都是浮云,作品给力才行。以下是一些建议,帮助您更好地评估一个WordPress建站公司是否靠谱: 1. 查看案例的真实性…

通用开发技能系列:Authentication、OAuth、JWT 认证策略

云原生学习路线导航页(持续更新中) 本文是 通用开发技能系列 文章,主要对编程通用技能 Authentication、OAuth、JWT 认证策略 进行学习 1.Basic Authentication认证 每个请求都需要将 用户名密码 进行base64编码后,放在请求头的A…

Vaadin框架是如何处理前后端交互的?列举几个Vaadin中常用的UI组件,并描述它们的作用。如何使用Vaadin的布局管理器来构建复杂的用户界面?

Vaadin框架是如何处理前后端交互的? Vaadin框架处理前后端交互的方式主要基于服务端渲染和事件驱动的编程模型。以下是具体的处理过程: 服务端渲染:Vaadin应用程序的UI组件是在服务器端创建和渲染的。当用户在浏览器中访问应用程序时&#x…

基于隐私保护的可追踪可撤销密文策略属性加密方案论文阅读

论文是2022年发表的A Traceable and Revocable Ciphertext-Policy Attribute-based Encryption Scheme Based on Privacy Protection 摘要 本篇论文提出了一种具有用户撤销、白盒追踪、策略策略隐藏功能的CP-ABE方案。在该方案中密文被分为两个部分:第一个部分是和…

算法训练营30天|LeetCode 332.重新安排行程 51.N皇后 37.解数独

LeetCode 332.重新安排行程 题目链接&#xff1a; LeetCode 332.重新安排行程 代码&#xff1a; class Solution { public:unordered_map<string, map<string, int>> targets;bool backtracking(int ticketnum, vector<string>&result){if(result.si…

基于springboot实现教师人事档案管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线商城系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本ONLY在线商城系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理…

第六期丨酷雷曼无人机技能培训

第6期无人机技能提升培训 盼望着盼望着&#xff0c;第六期无人机技能提升培训会终于如期和大家见面了。 2024年1月1日&#xff0c;国务院、中央军事委员会颁布《无人驾驶航空器飞行管理暂行条例》&#xff0c;对民用无人机飞行活动实施更为严格的规范约束&#xff0c;越来越多…

阿里云服务器安装Java开发环境最佳实践

服务器环境安装 环境依赖服务器配置配置SSH登录打开安全配置端口远程连接配置秘钥 Linux服务器常用指令向远程服务器传送文件systemctl 相关 安装MySql安装步骤step1 检查并清除以前的mysql相关文件step2 安装step3 MySQL参数配置step4 设置开机启动step5 初始化数据库step6配置…

ABAP开发中常用弹窗的应用详解

在ABAP程序设计中为提示和交互的需要会经常用到弹窗&#xff0c; 所谓弹窗就是弹出一个框&#xff0c;告诉用户什么事情、需要确认什么、或者让用户输入什么内容等等&#xff0c;它价值在于通过提示、提醒、警告&#xff0c;帮助用户顺利完成业务流程中的必要操作或给用户提供实…

【JS】打乱数组顺序,用作领域:随机播放音乐

思路 循环数组随机获取数组下标取值&#xff1a; 取当前随机下标数组取当前循环的下标数组 相互替换步骤3的数组 /*** 随机数组顺序* param {Array} arr 数组* returns Array*/ const shufArr arr > {for (let i arr.length - 1; i > 0; i--) {const j Math.floor(M…

中国智慧城管哪家做的好?

智慧城市管理综合执法系统建立全市统一的法律法规、裁量基准、执法事项、执法文书和基础信息库&#xff0c;实现从获取线索、立案、调查、处理到结案全过程的信息化和文书制作的智能化。全面支持移动执法办案&#xff0c;提高执法效率。 技术架构&#xff1a; 微服务javasprin…

中颖51芯片学习1. 系统时钟及IO口输出操作

中颖51芯片学习1. 系统时钟及IO口输出操作 一、芯片介绍1. 规格2. 资源3. 中断源&#xff1a;4. 方框图5. 封装&#xff08;1&#xff09;32脚LQFP封装&#xff08;2&#xff09;28脚SOP封装&#xff08;3&#xff09;20脚SOP封装 二、开发环境搭建1. 安装keil2. 安装中颖keil插…

安全测试重点思考(中)--如何防止漏洞XSS和CSRF漏洞

如何防止漏洞XSS和CSRF漏洞 XSS漏洞的预防springsecurity框架来预防xss漏洞的步骤将特殊字符进行实体转义使用类库和修改cookie属性使用安全的HTTP Only Cookie使用安全的Cookie使用CSP&#xff08;内容安全策略&#xff09;使用专门的XSS防护库输入验证和过滤 XSS的面试题你对…

day18-分发糖果

问题描述&#xff1a; n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 你需要按照以下要求&#xff0c;给这些孩子分发糖果&#xff1a; 每个孩子至少分配到 1 个糖果。相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩子分发糖果&#xff0…

4.2总结

了解了部分Api的使用并学习了接口的API API API包含了较多种类&#xff08;System,Runtime等&#xff09; System其实就是一个工具类&#xff0c;提供了一些与系统相关的方法 下面有一些常间的System方法 方法名说明public static void exit (int status)终止当前运行的ja…

深入浅出 -- 系统架构之微服务架构常见的六种设计模式

面向服务的架构&#xff08;SOA&#xff09; 面向服务的架构&#xff08;SOA&#xff09;是一种设计方法&#xff0c;也是一个组件模型&#xff0c;它将应用程序的不同功能单元&#xff08;称为服务&#xff09;通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的…