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

python-文件系统(1)

文件操作涉及两件事情,即基本的I/O操作和文件系统操作(如文件的命名、创建、移动和引用)。因为各种操作系统的文件系统规范各不相同,所以文件操作会稍显复杂。为了简化跨平台的文件系统操作,Python已经提供了很多特性。如果不想全面了解这些特性,只了解基本的文件I/O操作还是相当简单的,但不推荐这种做法。这里介绍了一些引用文件时要用到的工具,都是与操作系统无关的。在进行文件基本I/O操作时,就可以用这种平台无关的方式打开相应的文件。

os.path和pathlib的对比

Python中处理文件路径和文件系统操作的传统方式,是通过os和os.path模块中的函数来完成的。这些函数完全能够胜任需求,但往往会使得代码过于冗长。自Python 3.5开始,引入了新的pathlib库,可以用更加面向对象、更统一的方式来完成文件操作。因为有大量的外部代码还在使用传统的方式,但是pathlib的应用正在日益增加,可能会成为新的标准。

路径和路径名

所有的操作系统都会用字符串来引用文件和目录,字符串中包含了给定文件或目录的名称。这种字符串通常被称为“路径名”,有时简称为路径。因为路径名是个字符串,所以在使用时也带来了一定的复杂性。Python做了大量工作,提供了很多函数来避免这种复杂性。但为了能高效运用这些Python函数,需要对一些隐藏的问题有些理解。路径名在各种操作系统中的写法都非常相似,因为几乎所有操作系统都把文件系统建模为树状结构,磁盘就是根目录,文件夹、子文件夹就是分支、子分支,依此类推。这就意味着大部分操作系统对文件的引用方式基本是相同的,都是通过路径名指定从文件系统的根(磁盘)开始直至要查找文件的路径。这种将根目录对应为磁盘的描述有点过于简化。路径名包含了一层层的文件夹名称,直至目标文件为止。

不同的操作系统,路径名的精确写法还是有差别的。Linux/UNIX路径名中,分隔文件或目录名称的字符是“/”,而在Windows路径名中则是用“\”。此外,UNIX文件系统只有一个根目录(通过把路径名的第一个字符设为“/”来引用),而Windows文件系统的每个驱动器都有单独的根目录,分别标记为A:\、B:\、C:\等(C:通常是主驱动器)。正是由于这些差异的存在,文件在不同的操作系统上有不同的路径名表示法。在Windows中名为C:\data\myfile的文件,在UNIX和Mac OS上可能被称为/data/myfile。Python提供的函数和常量可完成常见的路径名操作,而不必关心这些语法上的细节。只要稍加小心,就可以不管底层文件系统是什么,都能编写出正常运行的Python程序。

绝对路径和相对路径操作

系统支持以下两种路径表示法。

绝对路径指明了文件在整个文件系统中的确切位置,不会有什么歧义。绝对路径将给出文件的完整路径,从文件系统的根目录开始。

相对路径指明了文件相对于文件系统某点的位置,该相对点并不是由相对路径本身给出的。相对路径起始点的绝对位置,是由调用时的上下文给出的。下面是Windows系统绝对路径的两个示例:

C:\Program Files\Doom

D:\backup\June

下面是Linux系统中的两个绝对路径,以及Mac系统中的一个绝对路径:

/bin/Doom

/floppy/backup/June

/Applications/Utilities

下面是Windows系统中的两个相对路径:

mydata\project1\readme.txt

games\tetris

下面是Linux/UNIX/Mac系统中的相对路径

mydata/project1/readme.txt

games/tetris

Utilities/Java

相对路径获得上下文的第二种方式是,通过对当前工作目录的隐式引用。当前工作目录是指,在运行Python程序的任意时刻,程序记录的当前所在目录。如果调用参数给出的是相对路径,那么Python命令就会隐式利用当前工作目录。例如,os.listdir(path)命令用了相对路径作为参数,则该相对路径就以当前工作目录作为锚点(anchor),结果中文件名所在目录的路径就是当前工作目录加上参数指定的相对路径。

当前工作目录

每当在计算机上编辑文档时,都会有一个位置概念,即文档在计算机文件结构中所处的当前位置,因为大家会觉得与正在处理的文件处于同一个目录(文件夹)当中。类似地,每当Python运行时,也有一个当前位置的概念,即某时刻所处的目录结构。这一点很重要,因为程序可能需要获取当前目录中的文件列表。Python程序所在的目录被称为该程序的当前工作目录,当前工作目录可能与存放该程序的目录不同。如果想实际查看一下当前工作目录,请启动Python,用os.getcwd命令(获取当前工作目录)查看Python初始状态下的当前工作目录:

>>> import os

>>> os.getcwd()

调用函数os.getcwd时是不带参数的,以强调返回值不是固定不变的。如果执行了修改当前工作目录的命令,其返回结果就会发生变化。当前工作目录可能是存放Python程序的目录,也可能是启动Python时所在的目录。在Linux机器上,返回结果会是/home/myuser,也就是当前用户的主目录(home)。在Windows机器上,路径中会有额外的反斜杠插入。因为Windows系统用“\”作为路径分隔符,而在Python字符串中(如6.3.1节所述),“\”还具有特殊含义。下面输入:

>>> os.listdir(os.curdir)

常量os.curdir返回的是系统用来表示当前目录的字符串。在UNIX和Windows系统中,当前目录均表示为一个句点。但为了保证程序的可移植性,应该始终采用os.curdir而不是只输入一个句点。该字符串是个相对路径,也就是说os.listdir会将其加到当前工作目录的路径之后,路径其实没有发生变化。上述命令将会返回当前工作目录中所有文件/文件夹的列表。任选一些文件夹名称,键入以下命令:

os.chdir(directory_string)

os.getcwd()

由上可见,Python将会移入os.chdir函数参数指定的文件夹中。这时再次调用os.listdir(os.curdir),将会返回folder文件夹中的文件列表,因为os.curdir将相对新的当前工作目录而言。Python中有很多文件系统操作,都是以这种方式使用当前工作目录的。

相关文章:

  • 设计模式的引入
  • C语言 第一章(3)
  • NLP学习记录十:多头注意力
  • 二叉树中的深搜(典型算法思想)—— OJ例题算法解析思路
  • Python入门13:Python闭包与装饰器
  • 渗透测试(WAF过滤information_schema库的绕过,sqllib-46关,海洋cms9版本的注入)
  • Discourse 中集成 Claude 3.7 Sonnet 模型
  • AutoMQ 可观测性实践:如何使用 OpenTelemetry 监控 Kafka 和底层流存储
  • 从“Switch-case“到“智能模式“:C#模式匹配的终极进化指南
  • Vue 2 新手入门指南
  • 如何在docker上部署前端nginx服务(VUE)
  • dex2oat配置方法及优化指南
  • 【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
  • 关于在java项目部署过程MySQL拒绝连接的分析和解决方法
  • ubuntu上boost卸载和安装
  • 大模型自动提示优化(APO)综述笔记
  • Win10开启电脑自带录屏截图功能
  • 学Java第三十一天----------多态调用成员的特点
  • FastAPI系列:如何响应txt和json文件
  • 回溯算法(C/C++)
  • 李云泽:小微企业融资协调工作机制已发放贷款12.6万亿元
  • 辽宁召开假期安全生产工作调度会:绝不允许层层失守,绝不允许“带病运行”
  • 视频丨054B型护卫舰钦州舰南海实战化训练
  • 解放日报头版:上海张江模力社区托举“年轻的事业”
  • 用小型核反应堆给数据中心供电,国内企业正在开展项目论证
  • 魔都眼|西岸国际咖啡生活节:连接艺术、音乐与宠物