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

暑假Python基础整理 -- 文件及目录操作

基本文件操作


创建和打开文件

在Python中若要操作文件对象,需要先使用内置的 open() 函数实现。其语法格式如下:

file = open(filename[,mode[,buffering]])
  • file:被创建的文件对象
  • filename:要创建或者打开文件的名称,需要使用单引号或双引号括起来,若打开文件在当前目录下,则可以直接写文件名,否则需要指定完整路径
  • mode:可选参数,用于指定文件的打开模式。默认为 r 即只读模式
  • buffering:可选参数,用于指定读写文件的缓冲模式,若为0,则表示不缓存,若为1,则表示缓存;如大于1,则表示缓冲区的大小,默认为缓存模式

mode 的参数值及其说明

参数值说明文件必须存在
r以只读模式打开文件,文件的指针将放置文件开头
rb以二进制格式打开文件,只读模式,指针放置开头,用于非文本文件
r+打开文件后,可以读取文件内容,也可以写入新的内容覆盖掉原有内容(从头开始覆盖)
rb+以二进制格式打开文件,读写模式,指针放置开头,用于非文本文件
w以只写模式打开文件
wb以二进制格式打开文件,只写模式,用于非文本文件
w+打开文件后,先清空内容,对空文件有读写权限
wb+以二进制格式打开文件,读写模式,用于非文本文件
a以追加模式打开文件,若文件存在,文件指针放置于末尾,否则
ab二进制格式打开文件,追加模式,指针放置末尾
a+以读写模式打开文件,指针放置末尾
ab+二进制格式打开文件,追加模式,指针放置末尾

open()方法经常实现以下几个功能:

  • 打开一个不存在的文件时先创建该文件
  • 以二进制形式打开文件,如图片、音视频文件等
  • 打开文件时指定编码方式,默认GBK编码格式,若打开文件与编码不符将会抛出UnicodeDecodeError异常信息
关闭文件

打开文件后,需要及时关闭文件,以免对文件造成破坏。如关闭文件名为file的文件语法如下:

file.close()

close()方法先刷新缓冲区中还未写入的信息,然后关闭文件

打开文件使用with语句

使用with语句可以实现无论是否抛出异常都将保证with语句执行完毕后关闭已经打开的文件,其语法格式如下:

with expression as target:with_body
  • expression:用于指定一个表达式,这里可以是open()函数
  • target:指定一个变量,并将expression的结果保存在该变量中
  • with_body:用于指定with语句体
写入文件内容

Python的文件对象提供了write()方法,可以向文件写入内容,write()方法如下:

file.write(string)

其中file为文件对象,string为需要写入的字符串。

调用write()方法向文件写入内容的前提是,在打开文件时,指定的打开模式为w或者a,否则将会抛出异常(没有写入权限)。

注意:在写入文件后一定要调用close()方法关闭文件,否则,写入的内容不会被保存到文件中。这是因为,当我们在写入文件内容时,操作系统不会立即把数据写入磁盘中,而是先缓存起来,只有当调用close()方法时,操作系统才会保证把没有写入的数据全部写入磁盘中。另外,在向文件写入内容后,如果不想马上关闭文件,也可以调用文件对象提供的flush()方法,把缓冲区的内容写入文件中,这样也能保证将全部信息写入文件。

除了write()方法外,Python还提供了另一种写入方法,即writelines()方法,可以实现把字符串列表写入文件,但是不添加换行符。

读取文件

读取指定字符

文件对象体提供了read()方法读取指定个数的字符。其语法格式如下:

file.read([size])
  • file:打开的文件对象
  • size:可选参数,用于指定要读取的字符个数,若省略,则一次性读取所有内容

调用read()方法读取文件内容的前提是,打开文件时,指定的打开模式为r或者r+,否则,将抛出异常信息。

使用read(size)方法读取文件时,是从文件的开头读取的。若要读取部分内容,可以先使用文件对象的seek()方法将文件的指针移动到新的位置处,然后使用read(size)方法进行读取,其语法格式如下:

file.seek(offset[,whence])
  • file:表示已打开的文件对象
  • offset:用于指定移动的字符个数,其具体位置与whence相关
  • whence:用于指定从什么位置开始计算,如果值为0,则表示从头开始计算;如果值为1,则表示从当前位置开始计算,如果值为2,则表示从文件尾开始计算。默认为0.

对于whence参数,如果在打开文件时未使用b模式,则只允许从文件头开始计算相对位置。offset的值按一个汉字占两个字符、英文和数字都占一个字符计算的,这与read(size)方法不同。

例如:若要读取从第10个字符开始读取5个字符,示例代码如下:

with open('message.txt','r') as file:file.seek(10)string = file.read(5)print(string)

读取一行

文件对象提供了readline()方法用于每次读取一行数据,其语法格式如下:

file.readline()

读取全部行

文件对象提供了readlines()方法用于获取全部行,返回值为一个字符串列表,其语法格式如下:

file.readlines()

目录操作

osos.path 模块

通过 os 模块提供的通用变量,可获取与系统有关的信息。常用的变量有以下几个:

  • name:用于获取操作系统
  • linesep:获取当前操作系统上的换行符
  • sep:用于获取当前操作系统使用的路径分隔符

os 模块还提供了一些操作目录的函数,如:

函数说明
getcwd()返回当前的工作目录
listdir(path)返回指定路径下的文件和目录信息
mkdir(path[,mode])创建目录
makedirs(path1/path2...[,mode])创建多级目录
rmdir(path)删除目录
removedirs(path1/path2)删除多级目录
chdir(path)把path设置为当前工作目录
walk(top[,topdown[,onerror]])遍历目录树,该方法返回一个元组,包括所有路径名、所有目录列表和文件列表3个元素

os.path 模块也提供了一些操作目录的函数,如:

函数说明
abspath(path)用于获取文件或目录的绝对路径
exists(path)用于判断目录或者文件是否存在,bool型
join(path,name)将目录与目录或者文件名拼接起来
splitext()分离文件名和扩展名
basename(path)从一个目录中提取文件名
dirname(path)从一个路径中提取文件路径,不包括文件名
isdir(path)用于判断是否为有效路径
路径

当前工作目录是指当前文件所在目录的目录。在Python中通过getcwd()函数获取当前工作目录。如:

import os
print(os.getcwd())

相对路径依赖于当前工作目录,即在当前目录下的其他文件或子路径下的文件都可以通过[子路径名/...]/文件方式访问。假设在D:file\code目录下存在info子目录,子目录下存在demo.txt文件。现在要使用open()函数将demo.txt文件打开,则可以使用下述代码:

with open("info/demo.txt",'r') as f:message = f.read()

绝对路径的方式如下所示:

with open("D:file/code/info/demo.txt",'r') as f:message = f.read()

在指定文件路径时,需要对路径中的 \ 使用 \\ 进行转义操作,或者将 \ 替换为 /,若不想修改\,也可以在路径字符串前加一个r

若要将两个或者多个路径拼接到一起组成一个新的路径,可以使用os.path模块的join()函数来实现,其具体语法如下:

os.path.join(path1[,path2,path3...])

path1path2等参数代表路径,若该参数中不存在绝对路径,那么最后拼接的结果为一个相对路径。该过程不会检测路径是否存在。

在使用join()函数拼接时,若存在多个绝对路径,那么将以最靠右侧的绝对路径为主,并且该路径之前的参数都将忽视。

判断目录是否存在

当需要判断路径是否存在时,可以使用os.path模块提供的exists()函数,该函数除了可以判断目标是否存在,还可以判断文件是否存在。用法如下:

import os
os.path.exists(path)

path为需要判断的路径,绝对或相对路径任意,返回值为bool类型。

创建目录

Python中的os模块提供了两个创建目录的方式:

  • 创建一级目录 os.mkdir()
  • 创建多级目录os.makedirs()

创建一级目录

创建一级目录表示一次只能创建一级目录,可以通过os.mkdir()实现,若该目录上级不存在,则抛出FileNotFoundError异常信息。其语法如下:

os.mkdir(path,mode=0o777)
  • path:用户指定要创建的目录,绝对或相对路径任意
  • mode:用于指定数值模式,默认值为0o777,该参数非Unix系统将被忽视或无效。

创建多级目录

可以通过os.makedirs()实现创建多级目录,该函数通过采用递归的方式创建目录。其语法如下:

os.mkdir(path,mode=0o777)
  • path:用户指定要创建的目录,绝对或相对路径任意
  • mode:用于指定数值模式,默认值为0o777,该参数非Unix系统将被忽视或无效。
删除目录

删除目录可以使用os模块的rmdir()函数来实现,只有当前要删除的文件为空时才生效,其语法如下 :

import os
os.rmdir(path)

若目录不存在,将抛出FileNotFoundError异常信息,因此该函数可以于exists()函数联合使用。

若要删除非空目录,需要使用Python内置模块shutillrmtree()函数实现。

遍历目录

对指定的目录下的全部目录及文件运行一遍。在Python中,oswalk()函数提供了遍历目录的功能,其语法格式如下:

import os
os.walk(top[,topdown][, onerror][, followlinks])
  • top:用于指定要遍历内容的根目录
  • topdown:可选参数,指定遍历列表的顺序,True表示自上而下遍历(先遍历根目录),False表示自下而上遍历(先遍历最后一级子目录),默认为True
  • onerror:可选参数,指定错误处理方式,默认为忽略,若不想默认,可自行采用函数。
  • followlinks:可选参数,默认情况下,walk()函数不会向下转换成解析到目录的符号链接,将该函数值设置为True,表示用于指定在支持的系统上访问由符号链接指向的目录。
  • 返回值:返回一个包含三个元素(dirpathdirnamesfilenames)的元组生成器对象。其中dirpath表示当前遍历的路径,dirnames表示当前路径下包含的子目录,是一个列表,filenames表示当前路径下包含的文件,是一个列表。

walk()函数只在UNIX和Windows系统有效

高级文件操作

os模块提供的与文件相关的函数及其说明如表:

函数说明
access(path,accessmode)获取文件访问权限(读取/写入/执行权限),值为R_OK(读取)、W_OK(写入)、X_OK(执行)、F_OK(存在),若权限都存在,则返回1,否则返回0
chmod(path,mode)修改path指定文件的访问权限
remove(path)删除path指定的文件路径
rename(src,dst)将文件或目录src重命名为dst
stat(path)返回path指定文件的信息
startfile(path[, operation])使用关联的应用程序打开path指定的文件

在使用rename()函数重命名目录时,只能修改最后一级的目录名称,否则将抛出异常

获取文件基本信息

在Python中,可以通过os模块的stat()函数获取文件的基本信息。其格式语法如下:

import os
print(os.stat(path))

原文地址: 暑假Python基础整理 – 文件及目录操作

http://www.lryc.cn/news/588575.html

相关文章:

  • keepalive模拟操作部署
  • 2025-7-14-C++ 学习 排序(2)
  • IoC容器深度解析:架构、原理与实现
  • 驱动开发系列60- Vulkan 驱动实现-SPIRV到HW指令的实现过程(1)
  • 分支战略论:Git版本森林中的生存法则
  • PHP password_verify() 函数
  • 什么是微服务?-核心思想:化整为零,各自为战
  • Node.js + Express的数据库AB View切换方案设计
  • 【EM算法】三硬币模型
  • 自动微分模块
  • Class9简洁实现
  • JavaScript进阶篇——第二章 高级特性核心
  • JavaScript进阶篇——第一章 作用域与垃圾回收机制
  • 力扣 hot100 Day44
  • java基础(day07)
  • 板凳-------Mysql cookbook学习 (十一--------10)
  • 06【C++ 初阶】类和对象(上篇) --- 初步理解/使用类
  • ThreadLocal内部结构深度解析
  • 《大数据技术原理与应用》实验报告三 熟悉HBase常用操作
  • 每天一个前端小知识 Day 31 - 前端国际化(i18n)与本地化(l10n)实战方案
  • html js express 连接数据库mysql
  • Java:继承和多态(必会知识点整理)
  • 为什么资深C++开发者大部分选vector?揭秘背后的硬核性能真相!
  • 9.服务容错:构建高可用微服务的核心防御
  • #Paper Reading# Apple Intelligence Foundation Language Models
  • 微服务初步入门
  • 量子计算新突破!阿里“太章3.0”实现512量子比特模拟(2025中国量子算力巅峰)
  • 【算法训练营Day12】二叉树part2
  • 《大数据技术原理与应用》实验报告二 熟悉常用的HDFS操作
  • 【小白量化智能体】应用5:编写通达信股票交易指标及生成QMT自动交易Python策略程序