Python- 文件处理

2023-11-15

os.path.splitext(file)[0] 获取文件名

file.endswith(".c") 用于检查一个文件名(存储在变量 file 中)是否以 “.c” 结尾。如果是这样,那么它可能是一个 C 语言源代码文件。

接下来,os.path.splitext(file)[0] 用于获取该文件的名称,但不包括扩展名(即 “.c”)。函数 os.path.splitext 将文件名分割为两部分:一部分是文件名(不包括扩展名),另一部分是扩展名(包括点字符)。函数返回一个包含这两个部分的元组。通过索引 [0],我们只取该元组的第一个元素,即不包括扩展名的文件名。

例如,如果 file 是 “example.c”,os.path.splitext(file) 将返回一个元组:('example', '.c')。取索引 [0],你就会得到 “example”,这就是不包括扩展名的文件名。

总体而言,这段代码用于处理以 “.c” 结尾(可能是 C 语言源文件)的文件,并获取这些文件的基础名称(即不包括 “.c” 扩展名的部分)。

这样做的原因可能是多种多样的,取决于具体的应用场景。

os.walk()

os.walk 是一个 Python 的标准库函数,用于遍历一个目录树。该函数生成一个迭代器,该迭代器在每次迭代时返回一个三元组(root, dirs, files)。

  • root:是你正在遍历的目录的名称(一个字符串)。
  • dirs:是一个列表,包含 root 中所有的目录名(不包括子目录中的目录)。
  • files:也是一个列表,包含 root 目录中所有的文件名(不包括子目录中的文件)。

这三个值允许你知道在遍历目录结构时你在哪里,以及每个目录中有什么。

举一个例子,假设你有如下的目录结构:

mydir/
|-- subdir1/
|   |-- file1.txt
|   `-- file2.txt
|-- subdir2/
`-- file3.txt

如果你调用 os.walk("mydir"),这个函数将返回一个迭代器,当你遍历这个迭代器时,你会得到类似以下的三元组:

  1. 第一次迭代:('mydir', ['subdir1', 'subdir2'], ['file3.txt'])
  2. 第二次迭代:('mydir/subdir1', [], ['file1.txt', 'file2.txt'])
  3. 第三次迭代:('mydir/subdir2', [], [])

你可以通过一个 for 循环来遍历这个迭代器,如:

import os

for root, dirs, files in os.walk("D:\\llvm-gcc-test\\llvm-test-suite"):
    # 在这里,你可以对 root, dirs, files 进行操作
    pass

这样可以方便地遍历一个目录及其所有子目录,并得知每个目录下有哪些文件和子目录。

os.path.join()

os.path.join 是一个 Python 标准库中的函数,用于连接一个或多个路径组件以生成一个完整的文件或目录路径。该函数考虑了操作系统的文件路径分隔符,因此它是跨平台的。在 UNIX 和 Linux 系统中,路径组件间使用正斜杠 / 分隔,而在 Windows 系统中使用反斜杠 \ 分隔。

该函数接受任意数量的路径组件作为参数,并将它们连接起来以生成一个完整的路径。

示例

在 UNIX 或 Linux 上:

import os

path = os.path.join("folder1", "folder2", "file.txt")
# 输出:'folder1/folder2/file.txt'

在 Windows 上:

import os

path = os.path.join("folder1", "folder2", "file.txt")
# 输出:'folder1\\folder2\\file.txt'

特性

  1. 平台独立性:这个函数可以在所有主要的操作系统上工作,它会自动选择正确的文件路径分隔符。

  2. 灵活性:它可以接受任意数量的参数,并且参数可以是目录名、文件名或者两者的组合。

  3. 智能连接:如果提供的某个路径组件是一个绝对路径,则该函数会从该组件开始重新构造新的路径。例如:

    os.path.join("/folder1", "/folder2", "file.txt")
    

    在 UNIX 或 Linux 上,这将返回:'/folder2/file.txt'

使用场景

这个函数在你需要创建文件路径时特别有用,特别是当代码需要在多个平台上运行时。通过使用 os.path.join,可以确保代码在所有平台上都能正确地生成文件路径。

注意

虽然这个函数是用于操作路径的,但它实际上不会检查路径或文件是否真实存在于文件系统中。它仅仅是用于生成路径字符串的。如果需要检查路径是否存在,可以使用 os.path.exists 函数。

os.path.basename()

os.path.basename() 是 Python 中的一个函数,用于返回指定路径的基础名。基础名是路径中最后的文件名或目录名。也就是说,它会从完整路径中剥离所有的目录部分,只返回文件名或末尾的目录名。

这个函数是 os.path 模块的一部分,该模块为文件路径名操作提供了多个功能。

用法

import os

print(os.path.basename("/home/user/documents/file.txt"))

输出:

file.txt

再看一个例子,如果我们只给出一个目录路径:

print(os.path.basename("/home/user/documents/"))

输出:

documents

如果路径的末尾是一个斜杠(或在 Windows 上是反斜杠),则它将返回末尾的目录名。

注意

  1. os.path.basename() 只对路径字符串进行操作,它不检查文件系统以确定给定路径是否真的存在。
  2. 如果你只提供一个文件或目录的名字,没有前置的路径,那么 basename 会返回该名字本身。例如,os.path.basename("file.txt") 将返回 "file.txt"
  3. 如果路径是空字符串,则返回值也是空字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python- 文件处理 的相关文章

随机推荐

  • Linux 安装gcc和运行代码(Ubuntu为例)

    目录 一 安装gcc 二 gcc编译 运行代码 首先检测网络连通性 一 安装gcc 1 打开虚拟机终端 安装gcc 输入 sudo apt install gcc 2 安装完成后检查 输入 gcc version 如果出现以下内容 则说明安
  • 基于沙猫群优化算法的线性规划求解matlab程序

    基于沙猫群优化算法的线性规划求解matlab程序 1 沙猫群优化算法 沙猫的中文学名叫沙丘猫 俗名沙漠猫 与荒漠猫名字相似 但却是两种不同的猫科动物 沙猫生活在茫茫沙漠里 主要分布在分布于非洲北部 阿拉伯半岛中部和西南亚 沙猫的家园 是贫瘠
  • Node.js 从零开发 web server博客项目[koa2重构博客项目]

    web server博客项目 Node js 从零开发 web server博客项目 项目介绍 Node js 从零开发 web server博客项目 接口 Node js 从零开发 web server博客项目 数据存储 Node js
  • 【Python脚本抢红包】用Python写了一个自动抢红包工具,今年过年准备大干一场

    话说又要过年了 现在过年可没有小时候的味道了 小时候只顾着放鞭炮 现在只顾着各个群里蹲红包 但是手动抢肯定没戏 毕竟手can谁也没办法 那就只能试试能不能通过编程的方式实现自动化抢红包了 跟小编一样财迷的铁汁们 可以往下滑了 代码文末可取
  • 基于计算机视觉的智能制造:实现对智能制造的实时监控和调度

    作者 禅与计算机程序设计艺术 1 简介 智能制造 Intelligent Manufacturing 是在不断进步的科技和技术领域里 将智能技术应用到制造领域中去 实现机器 设备 材料的自动化和精准化过程 提升生产效率 降低成本 节约能源和
  • ESX虚拟机克隆后提示设备"0"的配置无效

    一般是克隆后mac地址与原网卡mac地址不符导致的 解决办法 下载虚拟机 vmx文件 修改其中的跟网卡eth0相关的mac地址跟实际mac相符 实在不行就删除网卡0 再添加一块网卡 有时候网卡驱动类型不符也不会报类似的错误 虚拟网卡一般有三
  • 区块链100讲:Hyperledger Fabric 中的链码(智能合约)

    1 链码概念 网络运行环境我们已经启动完成 现在我们从开发者的角度来认识一下完成交易所必须的智能合约 在 Hyperledger Fabric 中被称之为 Chaincode 也就是链上代码 的相关知识 以便于理解账本中的数据到底是通过什么
  • Windows 找不到文件 ‘gpedit.msc‘。请确定文件名是否正确后,再试一次。(已解决)

    今天在使用命令gpedit msc打开组策略编辑器报错 Windows 找不到文件 gpedit msc 请确定文件名是否正确后 再试一次 离谱 我都没改过设置什么的 后来找到解决办法 重新安装 桌面新建txt文档 文档里输入内容 echo
  • 程序员-接单网站

    远程工作平台 1 靠山云 https www kaoshanyun com 靠山云平台新型远程办公兼职平台 为中高端程序员 产品经理和设计师等等互联网相关人员提供稳定的线上工作机会 包括自由工作 远程工作和兼职工作 还支持按需雇佣 工作模式
  • C++ 程序抛异常产生的 core 文件,无法显示正确的函数调用栈信息(备忘)

    问题 比如 如下程序 include
  • Windows与Mac中idea常用快捷键转换

    从 Windows 过度到 Mac 必备快捷键对照表 Mac 键盘符号说明 Command Shift Caps Lock Option Control Return Enter Delete 向前删除键 Fn Delete 上箭头 下箭头
  • Xlua学习笔记

    本篇笔记是记录 游戏热更新实战案例 基于xLua 的学习笔记 1 Xlua的环境搭建 1 导入Xlua插件 上Github上下载Xlua插件 将Xlua解压 将Asset下的所有文件拷贝到当前项目目录Asset下 拷贝与Asset同级目录下
  • 关于STM32L系列MCU adc 测地信号不为0

    关于STM32L011系列MCU adc 测地信号不为0 Analog模拟adc测试为40或更大 如图所示 之前请教很多工程师说 adc 引脚没有接到真正的地信号 AD IO 一般 RC 过后到IO或者其它干扰影响 但最终也没有解决 尝试新
  • 框架——Mybatis中resultType和resultMap的区别

    一 区别简述 1 Mybatis的结果集是通过反射实现的 2 MyBatis中在查询进行select映射的时候 返回类型可以用resultType 也可以用resultMap resultType是直接表示返回类型 基础类型 包装类型 而r
  • 数据结构---填数字

    填数字 JAVA实现 C 实现 JAVA实现 public static int myFindABC int total 0 int sum 0 HashMap
  • 大规模部署lxc容器遇到的若干问题

    线程数控制 启动线程过多会导致资源不足引发的lxc start命令无法执行问题 到致大量容器只执行了lxc copy 而无法真正运行 具体情况应视服务器硬件条件 cpu 内存 在本项目部署中主要瓶颈在于cpu 以及当前服务器状态 当前主要是
  • Nginx Proxy Manger-反向代理神器-Docker一键部署

    Nginx Proxy Manger 反向代理神器 利用Docker实现一键部署 Lunix发行版 推荐使用Debian 10 或者 Ubuntu 20 04或更高版本 Nginx Proxy Manger 是一个反向代理管理系统 它基于
  • vuex存储保存数据、使用数据,超详细解说

    之前的项目中使用过一次vuex搭配localstorage存储token 使token持久化保存 好长时间不用 又把vuex的使用忘的一干二净 重新百度搜索 自己尝试后实现需求 我的业务需求是父页面中嵌套了一个子页面 父页面的一个卡片列表区
  • k8s job机制初探

    博客作为学习笔记记录 若有理解或表述错误 欢迎指出 k8s的job机制 k8s官网参考 k8s的job是用来执行一次性任务的一类资源 相关的还有cronjob 用于执行以下周期性任务 部署job之后 k8s会起对应pod 当pod的状态为f
  • Python- 文件处理

    os path splitext file 0 获取文件名 file endswith c 用于检查一个文件名 存储在变量 file 中 是否以 c 结尾 如果是这样 那么它可能是一个 C 语言源代码文件 接下来 os path split