Python标准库【os】5 文件和目录操作2

文章目录

  • 8 文件和目录操作
    • 8.7 浏览目录下的内容
    • 8.8 查看文件或目录的信息
    • 8.9 文件状态修改
      • 文件标志位
      • 文件权限
      • 文件所属用户和组
      • 其它
    • 8.10 浏览Windows的驱动器、卷、挂载点
    • 8.11 系统配置信息


os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。

这里整理了文件操作的部分方法。

参考:os模块官方文档

os模块的方法和系统相关,且一些方法依赖python版本,测试时使用下面的在线工具:
在线python-3.12版本-Unix平台


8 文件和目录操作

8.7 浏览目录下的内容

  • os.listdir(path='.') 返回path指定目录下的条目的名称列表。
    结果中不会包含特殊条目'.''..'
    path为字节串时,返回的结果也是字节串。

    >>> os.listdir("/")
    ['etc', 'sys', 'lib', 'srv', 'home', 'tmp', 'bin', 'boot', 'lib64', 'usr', 'dev', 'sbin', 'mnt', 'run', 'root', 'media', 'var', 'opt', 'proc', '.dockerenv']
    
  • os.scandir(path='.') 返回类os.DirEntry类实例的迭代器,对应指定目录下的条目。
    如果需要文件类型或属性信息,这个方法比os.listdir()更好用。因为os.DirEntry对象包含了这些信息。
    scandir()支持上下文管理器:

    with os.scandir(path) as it:for entry in it:if not entry.name.startswith('.') and entry.is_file():print(entry.name)
    
    >>> os.scandir('/')
    <posix.ScandirIterator object at 0x7f5d787d7530>
    >>> list(os.scandir("/"))[:5]
    [<DirEntry 'etc'>, <DirEntry 'sys'>, <DirEntry 'lib'>, <DirEntry 'srv'>, <DirEntry 'home'>]
    
  • class os.DirEntry
    os.scandir()生成的对象,表示目录内某个条目的路径和文件属性。
    它可以作为类路径对象使用。它的属性和方法的调用结果是缓存好的,如果文件源数据已更改,就需要使用os.stat()获取最新的信息。

    它有以下属性和方法:

    • name,文件名,是基于os.scandir()的path参数的相对路径。
    • path,完整路径。os.scandir()的path参数为绝对路径时,该属性就为绝对路径;path参数是文件描述符,则该属性和name属性相同。
    • isnode() 返回条目的索引节点号。
    • is_dir(*, follow_symlinks=True) 条目是否为目录或指向目录的符号链接。
    • is_file(*, follow_symlinks=True) 条目是否为文件或指向文件的符号链接。
    • is_symlink() 条目是否为符号链接(断开的链接也算)。
    • is_junction() 条目是否为接合点(断开也算)。
    • stat(*, follow_symlinks=True) 返回条目对应的os.stat_result对象。
  • os.walk(top, topdown=True, onerror=None, followlinks=False)
    生成目录树中的文件名,方式为从上到下或从下到上浏览目录树。

    以top为根,目录树中的每个目录都会生成一个三元组(dirpath, dirnames, filenames)dirpath表示目录的路径,dirnamesdirpath中的子目录名称组成的列表。filenamesdirpath中非目录文件组成的列表。列表中的名称不包含路径部分。

    topdown为True时先生成父目录的三元组,为False时先生成子目录的三元组。topdown为True时,就地修改dirnames列表,后续只会在dirnames中的内容做查找。这样做可以减少搜索、加入特定的访问顺序。topdown为False时,修改dirnames不影响后续检索,因为dirnamesdirpath之前就已经生成了。

    top为相对路径时,在os.walk()返回前不要更改工作目录。
    followlinks设置为True时,对于指向父目录的链接,会出现无限递归。

    >>> os.walk("/")
    <generator object walk at 0x7f905bf94040>
    >>> list(os.walk("/"))[:1]
    [('/', ['etc', 'sys', 'lib', 'srv', 'home', 'tmp', 'bin', 'boot', 'lib64', 'usr', 'dev', 'sbin', 'mnt', 'run', 'root', 'media', 'var', 'opt', 'proc'], ['.dockerenv'])]
    
  • os.fwalk(top='.', topdown=True, onerror=None, *, dir_fd=None, follow_symlinks=False)
    效果和os.walk()一样,不过产生四元组(dirpath, dirnames, filenames, dirfd),dirfd是指向dirpath的文件描述符。


8.8 查看文件或目录的信息

  • os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)
    使用实际用户ID/用户组ID测试对path的访问。

    参数mode指定对path做什么测试:os.F_OK(是否存在)、os.R_OK(可读)、os.W_OK(可写)、os.X_OK(可执行)。

    参数effective_ids为True时,将使用有效用户ID/用户组ID而不是实际用户ID/用户组ID。可以用os.supports_effective_ids检测是否支持使用有效用户ID/用户组ID。

    os.access()方法指示I/O操作会成功,但是实际可能失败,尤其是对网络文件系统的操作。

  • os.supports_effective_ids
    一个集合,表示当前平台上是否支持os.access()effective_ids指定为True。不支持时集合为空。

    >>> os.supports_effective_ids
    {<built-in function access>}
    
  • os.stat(path, *, dir_fd=None, follow_symlinks=True)
    获取文件或描述符的状态。返回一个os.stat_result对象。

    >>> os.stat('.')
    os.stat_result(st_mode=16895, st_ino=2814749767298829, st_dev=86, st_nlink=1, st_uid=0, st_gid=0, st_size=4096, st_atime=1740675232, st_mtime=1740675232, st_ctime=1740675232)
    
  • os.lstat(path, *, dir_fd=None)
    类似于os.stat,但不会跟随符号链接。
    返回一个类os.stat_result的实例。

  • class os.stat_result
    这个类用于os.stat()os.fstat()os.lstat的输出。
    它有以下属性:

    • st_mode,文件模式,包括文件类型和权限;
    • st_ino,文件的索引节点号;
    • st_dev,文件所在设备的标识符;
    • st_nlink,硬链接数目;
    • st_uid,所有者的用户ID;
    • st_gid,所有者的组ID;
    • st_size,文件大小(字节),符号链接的大小是它包含的路径的长度;
    • st_atime,最近访问时间(秒);
    • st_mtime,最近修改时间(秒);
    • st_ctime,元数据最近更改的时间(秒);
    • st_atime_ns,最近访问时间(纳秒);
    • st_mtime_ns,最近修改时间(纳秒);
    • st_ctime_ns,元数据最近更改的时间(纳秒);
    • st_birthtime,文件创建时间(秒);
    • st_birthtime_ns,文件创建时间(纳秒);
    • st_blocks,文件的字节块数,每块512字节;
    • st_blksize,块大小;
    • st_rdev,设备类型;
    • st_flags,用户定义的文件标志位;
    • st_gen,文件生成号;
    • st_fstype,文件所在的文件系统的类型的唯一标识符;
    • st_rsize,文件的实际大小;
    • st_creator,文件的创建者;
    • st_type,文件类型;

    上述时间属性的值依赖于操作系统的精度。

  • os.statvfs(path) 返回所在的文件系统信息。仅Unix可用。

    >>> os.statvfs(".")
    os.statvfs_result(f_bsize=4096, f_frsize=4096, f_blocks=244186111, f_bfree=83501754, f_bavail=83501754, f_files=999, f_ffree=1000000, f_favail=1000000, f_flag=1024, f_namemax=255)
    

8.9 文件状态修改

文件标志位

  • os.chflags(path, flags, *, follow_symlinks=True)
    把path的flags设置为其他由数字表示的flags。
    flags的值在stat模块中定义。
  • os.lchflags(path, flags) 把path的flags设置为其他数字表示的flags。

文件权限

  • os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True) 把path的权限改为其他mode表示的权限。
    mode的可选值在stat模块中定义。
  • os.lchmod(path, mode) 把path的mode改为其他数字表示的mode。
    等效于os.chmod(path, mode, follow_symlinks=False)

文件所属用户和组

  • os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)
    修改path的用户和组ID。uid、gid设置为-1时表示不做修改。

  • os.lchown(path, uid, gid) 修改path的用户和组ID。
    等效于os.chown(path, uid, gid, follow_symlinks=False)

  • os.utime(path, times=None, *, [ns, ]dir_fd=None, follow_symlinks=True) 设置文件的访问时间和修改时间。
    times不为None时,必须是(atime, mtime)形式的二元组,成员是表示秒的整数或浮点数。
    times为None,指定ns时,ns必须是纳秒组成的二元组(atime_ns, mtime_ns)
    times为None且未指定ns时,相当于以当前时间指定ns=(atime_ns, mtime_ns)
    同时指定times和ns会出错。

其它

  • os.sync() 强制将所有内容写入磁盘。
  • os.truncate(path, length) 截断文件,使其最大为length大小。

8.10 浏览Windows的驱动器、卷、挂载点

  • os.listdrives() 返回系统的驱动器名称列表。

    >>> os.listdrives()
    ['C:\\', 'D:\\']
    
  • os.listvolumes() 返回一个包含系统中卷的列表。

  • os.listmounts(volume) 返回指定卷的挂载点的列表。
    volume必须是GUID路径,如os.listvolumes()返回的值。

    >>> os.listvolumes()
    ['\\\\?\\Volume{02cf02ce-0000-0000-0000-100000000000}\\', '\\\\?\\Volume{d29ac86d-e09b-40da-b12c-87d386a77303}\\', '\\\\?\\Volume{fc57ca93-ead3-4d89-9578-543426fafadf}\\', '\\\\?\\Volume{836efff0-1021-4a45-8c98-aa445d4d836a}\\']
    >>> os.listmounts(os.listvolumes()[1])
    ['C:\\']
    

8.11 系统配置信息

  • os.pathconf(path, name)
    返回所给名称的文件的系统配置信息。

  • os.pathconf_names 当前系统定义的配置名称字典。
    os.pathconf()os.fpathconf()两个函数可接受的名称和整数值之间的映射。

    >>> os.pathconf_names
    {'PC_ALLOC_SIZE_MIN': 18, 'PC_ASYNC_IO': 10, 'PC_CHOWN_RESTRICTED': 6, 'PC_FILESIZEBITS': 13, 'PC_LINK_MAX': 0, 'PC_MAX_CANON': 1, 'PC_MAX_INPUT': 2, 'PC_NAME_MAX': 3, 'PC_NO_TRUNC': 7, 'PC_PATH_MAX': 4, 'PC_PIPE_BUF': 5, 'PC_PRIO_IO': 11, 'PC_REC_INCR_XFER_SIZE': 14, 'PC_REC_MAX_XFER_SIZE': 15, 'PC_REC_MIN_XFER_SIZE': 16, 'PC_REC_XFER_ALIGN': 17, 'PC_SOCK_MAXBUF': 12, 'PC_SYMLINK_MAX': 19, 'PC_SYNC_IO': 9, 'PC_VDISABLE': 8}
    

以上是os模块关于文件和目录操作的一部分函数的整理。
该模块的其他内容参考:
os模块:环境变量、进程所属的用户和组
os模块:进程管理
os模块:调度策略、系统信息
os模块:文件和目录1
os模块:文件描述符操作1
os模块:文件描述符操作2

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

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

相关文章

【卡牌——二分】

题目 分析 发现答案具有二分性&#xff0c;果断二分答案 代码 #include <bits/stdc.h> using namespace std; using ll long long;const int N 2e510;int n, a[N], li[N]; ll m;bool check(int x) {ll t m;for(int i 1; i < n; i){if(a[i] > x) continue; //…

< 自用文儿 > Gobuster 暴力扫描工具与 SecLists 安全测试词表集合

Ethice 道德问题 GFW 的保护下&#xff0c;很多的设备操作系统是停留在更老的版本&#xff0c;应用软件也是&#xff0c;因此很多的漏洞没有被修复。通讯没有使用加密&#xff0c;例如网页没有使用 HTTPS 网站很多。几乎是半裸的在网络上等着被食。 不做恶是下限。 环境&…

java后端开发day23--面向对象进阶(四)--抽象类、接口、内部类

&#xff08;以下内容全部来自上述课程&#xff09; 1.抽象类 父类定义抽象方法后&#xff0c;子类的方法就必须重写&#xff0c;抽象方法在的类就是抽象类。 1.定义 抽象方法 将共性的行为&#xff08;方法&#xff09;抽取到父类之后。由于每一个子类执行的内容是不一样…

AI数据分析:用DeepSeek做数据清洗

在当今数据驱动的时代&#xff0c;数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展&#xff0c;AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行数据清洗。 数据清洗是数据分析的基础&#xff0c;其目的是…

第2_3章_入门管理资源服务器

入门 对于某些应用程序&#xff0c;你可以参考以下资源&#xff0c;快速开始使用 Keycloak 授权服务&#xff1a; 在 Wildfly 中保护 JakartaEE 应用程序&#xff08;https://github.com/keycloak/keycloak-quickstarts/tree/latest/jakarta/servlet-authz-client&#xff09…

2025年如何实现安卓、iOS、鸿蒙跨平台开发

2025年如何实现安卓、iOS、鸿蒙跨平台开发 文章目录 2025年如何实现安卓、iOS、鸿蒙跨平台开发1. 使用统一开发框架2. 华为官方工具链支持3. 代码适配策略4. 生态兼容性处理5. 性能与体验优化总结&#xff1a;方案选择建议 本文首发地址 https://h89.cn/archives/324.html 最新…

Azure Speech

1、文字转语音(Text-To-Speech, TTS) 2、语音转文字(Speech-To-Text): Azure Speech to Text 1- 环境配置&#xff1a;Microsoft Azure 注册使用免费服务&#xff1a; 需要信用卡&#xff0c;本人没有&#xff0c;所以没有完成注册

Cursor AI编程-详细教程

一点准备工作 Cursor方法论&#xff1a;简单到没有方法 Cursor能做什么 Cursor官网&#xff1a;https://www.cursor.com/ja Cursor文档&#xff1a;Cursor – Welcome to Cursor Cursor论坛&#xff1a;Weekly - Cursor - Community Forum 写程序代码 举例&#xff1a; 设…

Linux共享内存

共享内存原理 简而言之&#xff0c;就是两个进程指向了同一块物理空间。&#xff08;它们都能看到同一块内存&#xff09; 共享内存在内核中同时可以存在很多个&#xff0c;OS要管理所有的共享内存。 如何保证两个不同进程看到的是同一个共享内存呢&#xff1f;&#xff1f;&…

搭建gn环境踩坑存档

流程 1. 项目根目录下新增.gclient和.gclient_entries //.gclient solutions [{"name": "src","url": "","managed": False,"custom_deps": {},"custom_vars": {},}, ]// .gclient_entries entries …

CMU15445(2023fall) Project #3 - Query Execution(上)详细分析

晚日寒鸦一片愁 柳塘新绿却温柔 若教眼底无离恨 不信人间有白头 ——鹧鸪天 完整代码见&#xff1a; SnowLegend-star/CMU15445-2023fall: Having Conquered the Loftiest Peak, We Stand But a Step Away from Victory in This Stage. With unwavering determination, we pre…

【网络安全 | 漏洞挖掘】利用文件上传功能的 IDOR 和 XSS 劫持会话

未经许可,不得转载。 本文涉及漏洞均已修复。 文章目录 前言正文前言 想象这样一个场景:一个专门处理敏感文档的平台,如保险理赔或身份验证系统,却因一个设计疏漏而成为攻击者的“金矿”。在对某个保险门户的文件上传功能进行测试时,我意外发现了一个可导致大规模账户接管…

知识图谱-资源网

知识图谱-资源网 http://openkg.cn/datasets-type/https://www.ownthink.com/knowledge.html

【湖北省计算机信息系统集成协会主办,多高校支持 | ACM出版,EI检索,往届已见刊检索】第二届边缘计算与并行、分布式计算国际学术会议(ECPDC 2025)

第二届边缘计算与并行、分布式计算国际学术会议&#xff08;ECPDC 2025&#xff09;将于2025年4月11日至13日在中国武汉盛大召开。本次会议旨在为边缘计算、并行计算及分布式计算领域的研究人员、学者和行业专家提供一个高水平的学术交流平台。 随着物联网、云计算和大数据技术…

【Qt】MVC设计模式

目录 一、搭建MVC框架 二、创建数据库连接单例类SingleDB 三、数据库业务操作类model设计 四、control层&#xff0c;关于model管理类设计 五、view层即为窗口UI类 一、搭建MVC框架 里面的bin、lib、database文件夹以及sqlite3.h与工程后缀为.pro文件的配置与上次发的文章…

Grok3使用体验与模型版本对比分析

文章目录 Grok的功能DeepSearch思考功能绘画功能Grok 3的独特功能 Grok 3的版本和特点与其他AI模型的比较 最新新闻&#xff1a;Grok3被誉为“地球上最聪明的AI” 最近&#xff0c;xAI公司正式发布了Grok3&#xff0c;并宣称其在多项基准测试中展现了惊艳的表现。据官方消息&am…

Pytest测试用例执行跳过的3种方式

文章目录 1.前言2.使用 pytest.mark.skip 标记无条件跳过3.使用 pytest.mark.skipif 标记根据条件跳过4. 执行pytest.skip()方法跳过测试用例 1.前言 在实际场景中&#xff0c;我们可能某条测试用例没写完&#xff0c;代码执行时会报错&#xff0c;或者是在一些条件下不让某些…

DeepSeek开源周Day5: 3FS存储系统与AI数据处理新标杆

项目地址&#xff1a; GitHub - deepseek-ai/3FS: A high-performance distributed file system designed to address the challenges of AI training and inference workloads.GitHub - deepseek-ai/smallpond: A lightweight data processing framework built on DuckDB and…

什么是多线程?线程池?

文章目录 一、什么是多线程&#xff1f;二、多线程的实现方法1. 继承Thread类,重写run方法2. 实现Runnable接口&#xff0c;并创建Thread对象3. Callable和Future 三、线程的5种状态**New&#xff08;新创建&#xff09;****Runnalbe(可运行)****Running****Blocked(阻塞)****等…

MES生产制造执行管理系统(源码+配套文档)

在当今竞争激烈的制造业环境中&#xff0c;企业要想保持竞争优势&#xff0c;就必须不断提升生产效率、优化管理流程。MES&#xff08;制造执行系统&#xff09;作为连接上层计划管理与底层工业控制的桥梁&#xff0c;正逐渐成为众多制造企业转型升级的关键工具。一个功能全面的…