当前位置: 首页 > article >正文

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

相关文章:

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

文章目录 8 文件和目录操作8.7 浏览目录下的内容8.8 查看文件或目录的信息8.9 文件状态修改文件标志位文件权限文件所属用户和组其它 8.10 浏览Windows的驱动器、卷、挂载点8.11 系统配置信息 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面…...

⭐算法OJ⭐矩阵的相关操作【动态规划 + 组合数学】(C++ 实现)Unique Paths 系列

文章目录 62. Unique Paths动态规划思路实现代码复杂度分析 组合数学思路实现代码复杂度分析 63. Unique Paths II动态规划定义状态状态转移方程初始化复杂度分析 优化空间复杂度状态转移方程 62. Unique Paths There is a robot on an m x n grid. The robot is initially lo…...

【Java基础】Java中new一个对象时,JVM到底做了什么?

Java中new一个对象时&#xff0c;JVM到底做了什么&#xff1f; 在Java编程中&#xff0c;new关键字是我们创建对象的最常用方式。但你是否想过&#xff0c;当你写下new MyClass()时&#xff0c;Java虚拟机&#xff08;JVM&#xff09;到底在背后做了哪些工作&#xff1f;今天&…...

Baklib云内容中台的核心架构是什么?

云内容中台分层架构解析 现代企业内容管理系统的核心在于构建动态聚合与智能分发的云端中枢。以Baklib为代表的云内容中台采用三层架构设计&#xff0c;其基础层为数据汇聚工具集&#xff0c;通过标准化接口实现多源异构数据的实时采集与清洗&#xff0c;支持从CRM、ERP等业务…...

一个基于vue3的图片瀑布流组件

演示 介绍 基于vue3的瀑布流组件 演示地址: https://wanning-zhou.github.io/vue3-waterfall/ 安装 npm npm install wq-waterfall-vue3yarn yarn add wq-waterfall-vue3pnpm pnpm add wq-waterfall-vue3使用 <template><Waterfall :images"imageList&qu…...

内存中的缓存区

在 Java 的 I/O 流设计中&#xff0c;BufferedInputStream 和 BufferedOutputStream 的“缓冲区”是 内存中的缓存区&#xff08;具体是 JVM 堆内存的一部分&#xff09;&#xff0c;但它们的作用是优化数据的传输效率&#xff0c;并不是直接操作硬盘和内存之间的缓存。以下是详…...

【pytest框架源码分析一】pluggy源码分析之hook常用方法

简单看一下pytest的源码&#xff0c;其实很多地方是依赖pluggy来实现的。这里我们先看一下pluggy的源码。 pluggy的目录结构如下&#xff1a; 这里主要介绍下_callers.py, _hooks.py, _manager.py&#xff0c;其中_callers.py主要是提供具体调用的功能&#xff0c;_hooks.py提…...

《Kafka 理解: Broker、Topic 和 Partition》

Kafka 核心架构解析:从概念到实践 Kafka 是一个分布式流处理平台,广泛应用于日志收集、实时数据分析和事件驱动架构。本文将从 Kafka 的核心组件、工作原理、实际应用场景等方面进行详细解析,帮助读者深入理解 Kafka 的架构设计及其在大数据领域的重要性。 ​1. Kafka 的背…...

【AHK】资源管理器自动化办公实例/自动连点设置

此处为一个自动连续点击打开检查的自动化操作案例&#xff0c;没有quicker的鼠键录制&#xff0c;不常用了&#xff0c;做个备份 #MaxThreadsPerHotkey 2 ; 这个是核心&#xff01;&#xff01;&#xff01;&#xff01;确保可以同时运行多个热键或标签global isRunning : tru…...

在docker容器中运行vllm部署deepseek-r1大模型

# 在本地部署python环境 cd /app/ python -m venv myenv # 激活虚拟环境 source /app/myenv/activate # 要撤销激活一个虚拟环境&#xff0c;请输入: deactivate# 进入虚拟环境安装modelscope pip install modelscope# 下载大模型&#xff08;7B为例&#xff09; modelscope do…...

Django基础环境准备

Django基础环境准备 文章目录 Django基础环境准备1.准备的环境 win11系统&#xff08;运用虚拟环境搭建&#xff09;1.1详见我的资源win11环境搭建 2.准备python环境2.1 winr 打开命令提示符 输入cmd 进入控制台2.2 输入python --version 查看是否有python环境2.3在pyhton官网下…...

使用DeepSeek实现自动化编程:类的自动生成

目录 简述 1. 通过注释生成C类 1.1 模糊生成 1.2 把控细节&#xff0c;让结果更精准 1.3 让DeepSeek自动生成代码 2. 验证DeepSeek自动生成的代码 2.1 安装SQLite命令行工具 2.2 验证DeepSeek代码 3. 测试代码下载 简述 在现代软件开发中&#xff0c;自动化编程工具如…...

nio使用

NIO &#xff1a; new Input/Output,&#xff0c;在java1.4中引入的一套新的IO操作API&#xff0c;&#xff0c;&#xff0c;旨在替代传统的IO&#xff08;即BIO&#xff1a;Blocking IO&#xff09;&#xff0c;&#xff0c;&#xff0c;nio提供了更高效的 文件和网络IO的 操作…...

【考试大纲】中级网络工程师考试大纲(最新版与旧版对比)

目录 引言考试科目1:网络工程师基础知识考试科目2:网络工程师应用技术引言 最新的网络工程师考试大纲出版于 2024 年 10 月,本考试大纲基于此版本整理。 考试科目1:网络工程师基础知识 计算机系统知识1.1 计算机硬件知识 1.2 操作系统知识 1.3 系统管理 系统开发和运行…...

Spring的下载与配置

1. 下载spring开发包 下载地址&#xff1a;https://repo.spring.io/webapp/#/artifacts/browse/simple/General/libs-release-local/org/springframework/spring 打开之后可以看到有很多版本供选择&#xff0c;因为视频教程用的是4.2.4版本&#xff0c;于是我也选择这个 右键…...

解决IDEA使用Ctrl + / 注释不规范问题

问题描述&#xff1a; ctrl/ 时&#xff0c;注释缩进和代码规范不一致问题 解决方式 设置->编辑器->代码样式->java->代码生成->注释代码...

学术小助手智能体

学术小助手&#xff1a;开学季的学术领航员 文心智能体平台AgentBuilder | 想象即现实 文心智能体平台AgentBuilder&#xff0c;是百度推出的基于文心大模型的智能体平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的开发方式&#xff0c;…...

kafka-leader -1问题解决

一. 问题&#xff1a; 在 Kafka 中&#xff0c;leader -1 通常表示分区的领导者副本尚未被选举出来&#xff0c;或者在获取领导者信息时出现了问题。以下是可能导致出现 kafka leader -1 的一些常见原因及相关分析&#xff1a; 1. 副本同步问题&#xff1a; 在 Kafka 集群中&…...

【开源-鸿蒙土拨鼠大理石系统】鸿蒙 HarmonyOS Next App+微信小程序+云平台

✨本人自己开发的开源项目&#xff1a;土拨鼠充电系统 ✨踩坑不易&#xff0c;还希望各位大佬支持一下&#xff0c;在GitHub给我点个 Start ⭐⭐&#x1f44d;&#x1f44d; ✍GitHub开源项目地址&#x1f449;&#xff1a;https://github.com/lusson-luo/HarmonyOS-groundhog-…...

HBuilder X中,uni-app、js的延时操作及定时器

完整源码下载 https://download.csdn.net/download/luckyext/90430165 在HBuilder X中&#xff0c;uni-app、js的延时操作及定时器可以用setTimeout和setInterval这两个函数来实现。 1.setTimeout函数用于在指定的毫秒数后执行一次函数。 例如&#xff0c; 2秒后弹出一个提…...

下载pyenv

安装 1、git clone https://gitclone.com/github.com/pyenv/pyenv.git ~/.pyenv 备用&#xff1a;git clone https://hub.fgit.ml/pyenv/pyenv.git ~/.pyenv 配置环境变量 export PYENV_ROOT"$HOME/.pyenv" export PATH"$PYENV_ROOT/bin:$PATH"然后&…...

升级TTSDK抖音小游戏banner广告接入

升级TTSDK抖音小游戏banner广告接入 介绍修改总结 介绍 我们原来使用的是unity2021&#xff0c;这次为了抖音新出的TTSDK中的新的API升级我们将项目升级为了unity2022&#xff0c;这次抖音官方剔除了原来StartSDKUnityTools和Start Asset Analyser&#xff08;startmini&#x…...

vue 项目部署到nginx 服务器

一 vue 项目打包 1 本地环境 npm run build 2 打包完成生成一个dist 文件夹&#xff0c;将其放到服务器指定的文件夹&#xff0c;此文件夹可以在nginx 配置文件中配置 二 nginx 1 根据对应的系统搜索安装命令 sudo yum install nginx 2 查看conf位置 如果不知道的话 ng…...

ubuntu终端指令集 shell编程基础(一)

磁盘指令 连接与查看&#xff1a;磁盘与 Ubuntu 有两种连接方式&#xff1b;使用ls /dev/sd*查看是否连接成功&#xff0c;通过df系列指令查看磁盘使用信息。若 U 盘已挂载&#xff0c;相关操作可能失败&#xff0c;需用umount取消挂载。磁盘操作&#xff1a;使用sudo fdisk 磁…...

win11编译pytorch cuda128版本流程

Geforce 50xx系显卡最低支持cuda128&#xff0c;torch cu128 release版本目前还没有释放&#xff0c;所以自己基于2.6.0源码自己编译wheel包。 1. 前置条件 1. 使用visual studio installer 安装visual studio 2022&#xff0c;工作负荷选择【使用c的桌面开发】,安装完成后将…...

STM32G431RBT6——(1)芯片命名规则

相信很多新手入门STM学的芯片&#xff0c;是STM32F103C8T6&#xff0c;假如刷到个项目换个芯片类型&#xff0c;就会感到好难啊&#xff0c;看不懂&#xff0c;就无从下手&#xff0c;不知所云。其实没什么难的&#xff0c;对于一个个不同的芯片的区别&#xff0c;就像是学习包…...

mac Homebrew安装、更新失败

我这边使用brew安装git-lfs 一直报这个错&#xff1a; curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL更新brew update也是报这个错误。最后使用使用大佬提供的脚本进行操作&#xff1a; /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/mast…...

Ecode前后端传值

说明 在泛微 E9 系统开发过程中&#xff0c;使用 Ecode 调用后端接口并进行传值是极为常见且关键的操作。在上一篇文章中&#xff0c;我们探讨了 Ecode 调用后端代码的相关内容&#xff0c;本文将深入剖析在 Ecode 中如何向后端传值&#xff0c;以及后端又该如何处理接收这些值…...

Wireshark:自定义类型帧解析

文章目录 1. 前言2. 背景3. 开发 Lua 插件 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. 背景 Wireshark 不认识用 tcpdump 抓取的数据帧&#xff0c;仔细分析相关代码和数据帧后&#xff0c…...

每日学习Java之一万个为什么?[MySQL面试篇]

分析SQL语句执行流程中遇到的问题 前言1 MySQL是怎么在一台服务器上启动的2 MySQL主库和从库是同时启动保持Alive的吗&#xff1f;3 如果不是主从怎么在启动的时候保证数据一致性4 ACID原则在MySQL上的体现5 数据在MySQL是通过什么DTO实现的6 客户端怎么与MySQL Server建立连接…...