文件操作与管理

程序经常需要访问文件和目录,读取文件信息或写入文件信息,在Python语言中对文件的读写是通过文件对象(file object)实现的。Python的文件对象也称为类似文件对象或流(stream),因为Python提供一种类似于文件操作的API实现对底层资源的访问。文件对象可以是实际的磁盘文件,也可以是其他存储或通信设备,如内存缓冲区、网络、键盘和控制台。

文件操作

打开文件

文件对象可以通过 open()函数获得。open()函数是 Python 内置函数,它屏蔽了创建文件对象的细节,使得创建文件对象变得简单。open()函数语法如下:

open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)

其中file、mode 和 encoding 是最常用的参数,其它参数很少使用。

(1)file参数

file参数是要打开的文件,可以是字符串或整数。如果 file 是字符串表示文件名,文件名可以是相对路径,也可以是绝对路径;如果 file 是整数表示文件描述符,文件描述符指向一个已经打开的文件(文件描述符是一个整数值,它对应到当前程序已经打开的一个文件。例如标准输入文件描述符为0,标准输出文件描述符为1,标准错误文件描述符为2,打开其他文件的文件描述符依次是3、4、5等数字)。

(2)mode参数

mode 参数用来设置文件打开模式

文件打开模式参数
字符串说明
r只读模式打开(默认)
w写入模式打开文件,会覆盖已经存在的文件
x独占创建模式,如果文件不存在则创建并以写入模式打开文件,如果文件已存在则抛出异常 FileExistsError
a追加模式,如果文件存在,写入内容追加到文件末尾
b二进制模式
t文本模式(默认)
+更新模式

注意:

  1. b 和 t 是文件类型模式,如果是二进制文件需要设置 rb、wb、xb、ab,如果是文本文件需要设置 rt、wt、xt、at,由于 t 是默认模式,因此可以省略为 r、w、x、a。
  2. +必须与 r、w、x 和 a 组合使用来设置文件为读写模式,对于文本文件可以使用 r+、w+、x+ 和 a+,对于二进制文件可以使用 rb+、wb+、xb+ 和 ab+。
  3. r+、w+、和 a+ 的区别:r+ 打开文件时如果文件不存在则抛出异常;w+ 打开文件时如果文件不存在则创建文件,文件存在则清除文件内容;a+打开文件时如果文件不存在则创建文件,文件存在则在文件末尾追加。

(3)buffering参数

使用缓冲区可以提高效率减少 IO 操作,文件数据首先被放到缓冲区中,当文件关闭或刷新缓冲区时,数据才会真正写入到文件中。buffering 是设置缓冲区策略,默认值为 -1,此时系统会自动设置缓冲区,通常是 4096 字节或 8192 字节;buffering=0 时关闭缓冲区,此时数据会直接写入到二进制文件中,这种模式主要应用于二进制文件的写入操作;当buffering>0时,buffering 用来设置缓冲区字节大小。

(4)encoding 参数 和 errors 参数

encoding 用来指定打开文件时的文件编码,主要用于文本文件的打开。errors 参数用来指定编码发生错误时如何处理。

(5)newline参数

用来设置换行模式

(6)closefd 参数和 opener 参数

这两个参数在 file 参数为文件描述符时使用。closefd 为True 时,文件对象调用close()关闭文件,同时也会关闭文件描述符;closefd 为 为 False 时,文件对象调用close()方法关闭文件,但文件描述符不会关闭。opener参数用于打开文件时执行的一些加工操作,opener 参数执行一个函数,该函数返回一个文件描述符。

可以看到此时我的项目中是没有“a.txt”文件

示例代码如下

#由于a.txt文件不存在,会创建文件,且文件内容为写入的World
with open("a.txt","w+") as f:f.write('World')#此时为r+,会覆盖文件内容为Hello
with open("a.txt","r+") as f:f.write('Hello')#此时为a+,会在文件原内容的末尾增加 World
with open("a.txt","a+") as f:f.write(' ')f.write("World")

代码运行结果

可以看到结果为我们输入的“Hello World”字符,且新建了一个 a.txt 文件 

关闭文件 

当使用 open()函数打开文件后,若不再使用文件应该调用文件对象的close()方法关闭文件。文件的操作往往会抛出异常,为了保证文件操作无论正常结束还是异常结束都能关闭文件,调用close()方法应该放在异常处理的finally代码块中,也可以用 with as 代码块进行自动资源管理。(推荐)

示例代码如下

f_name = "a.txt"try:f = open("a.txt")
except OSError as e:print('打开文件失败')
else:print('打开文件成功')try:content = f.read()print(content)except OSError as e:print('处理OS异常')finally:f.close()

该段代码中使用了两个try语句,其中 finally 没有与第一个 try 语句匹配,是因为如果文件打开失败,则 f =None,此时再关闭文件会引发异常。

代码运行结果

打开文件成功
Hello WorldProcess finished with exit code 0

文本文件读写

 文本文件读写的单位是字符,需要考虑编码问题

文本文件读写主要方法
方法名说明
read(size=-1)从文件中读取字符串,size 限制最多读取的字符数,size=-1表示没有限制,读取全部内容
readline(size=-1)读取到换行符或文件末尾并返回单行字符串,如果已经到文件尾,则返回一个空字符串,size 限制最多读取的字符数,size=-1表示没有限制
readlines()读取文件数据到一个字符串列表中,每个行数据是列表的一个元素
write(s)将字符串 s 写入文件,并返回写入的字符数
writelines(lines)向文件中写入一个列表,不添加行分隔符,因此通常为每一行末尾提供分隔符
flush()刷新写缓冲区,数据会写入文件中

首先在项目中新建一个“text.txt”文件,并写入相关内容

示例代码如下

with open("text.txt",'r',encoding="utf-8") as f:'''使用 f.readlines(),它将返回一个包含每一行作为元素的列表lines 是一个列表,其中包含了文件的每一行使用 for 循环遍历这个列表,并打印每一行print(line, end='') 确保在打印时不会添加额外的换行符'''lines = f.readlines()for line in lines:print(line,end="")# 复制文件内容到copy_name文件中with open("copy.txt","w",encoding="utf-8") as file:file.writelines(lines)print()print('文件复制成功')print("接下来文查看文件内容")
# 打印复制的文件内容
with open("copy.txt","r",encoding="utf-8") as f:lines = f.readlines()for line in lines:print(line,end="")

代码运行结果

这是一段用于测试的文字1
这是一段用于测试的文字2
这是一段用于测试的文字3
文件复制成功
接下来文查看文件内容
这是一段用于测试的文字1
这是一段用于测试的文字2
这是一段用于测试的文字3
Process finished with exit code 0

二进制文件读写

二进制文件读写的单位是字节,不需要考虑编码问题

示例代码如下

with open("CSDN.png",'rb') as f:b = f.read()with open("copy.png",'wb') as copy_f:copy_f.write(b)print("文件复制成功")

代码运行结果

os模块

Python对文件的操作是通过文件对象实现的,文件对象属于 Python 的 io 模块。如果想要通过Python程序管理文件或目录,如删除文件、修改文件名、创建目录、删除目录和遍历目录等,可以通过Python的 os 模块实现。

os 模块提供了使用操作系统功能的一些函数,如文件与目录管理。

os模块与文件和目录管理相关的函数
函数、属性名说明
os.rename(src,dst)修改文件名,src为源文件,dst为目标文件,他们都可以是相对当前路径或绝对路径表示的文件
os.remove(path)删除path所指的文件,如果path是目录,则会引发OSError
os.mkdir(path)

创建path所指的目录,如果目录已存在,则会引发FileExistsError

os.rmdir(path)删除path所指的目录,如果目录非空,则会引发OSError
os.walk(top)遍历top所指的目录树,自顶向下遍历目录树,返回值是一个有三个元素的元组(目录路径,目录名列表,文件名列表)
os.listdir(dir)列出指定目录中的文件和子目录
os.curdir属性获得当前目录
os.pardir属性获得当前父目录

示例代码如下

import os# 读取text.txt中的全部内容并复制给copy.txt
with open("text.txt",'r',encoding="utf-8") as f:b = f.read()with open("copy.txt",'w',encoding="utf-8") as copyfile:copyfile.write(b)# 修改copy.txt文件名为 copy2.txt
try:os.rename("copy.txt","copy2.txt")
except OSError:os.remove("copy2.txt")# 创建目录
try:os.mkdir('subdir')
except OSError:os.rmdir('subdir')#遍历目录
for item in os.walk('.'):print(item)

代码运行结果

os.path模块

对于文件和目录的操作往往需要路径,Python提供的 os.path模块提供对路径、目录和文件等进行管理的函数。

os.path模块常用函数
函数名说明
os.path.abspath(path)返回 path 的绝对路径
os.path.basename(path)返回 path路径的基础名部分,如果path指向的是一个文件,则返回文件名;如果path指向的是一个目录,则返回最后目录名
os.path.dirname(path)返回path路径中目录部分
os.path.exists(path)判断path文件是否存在
os.path.isfile(path)如果path是文件,则返回True
os.path.isdir(path)如果path是目录,则返回True
os.path.getatime(path)返回最后一次的访问时间,返回值是一个UNIX时间戳(1970年1月1日00:00:00以来至现在的总秒数),如果文件不存在则无法访问,会引发OSError
os.path.getctime(path)返回创建时间,返回值是一个UNIX时间戳,如果文件不存在或无法访问,则引发OSError
os.path.getsize(path)返回文件大小,以字节为单位,如果文件不存在则无法访问,会引发OSError

示例代码如下

import os.path
from datetime import datetimef_name = 'text.txt'
af_name = r'D:\creation\PythonStudy\Pythonproject\mypro01\text.txt'# 返回路径中基础名部分
basename = os.path.basename(af_name)
print(basename)# 返回路径中目录部分
dirname = os.path.dirname(af_name)
print(dirname)#返回文件的绝对路径
print(os.path.abspath(f_name))#返回文件大小
print(os.path.getsize(f_name))
#返回最近访问时间
atime = datetime.fromtimestamp(os.path.getatime(f_name))
print(atime)
#返回创建时间
ctime = datetime.fromtimestamp(os.path.getctime(f_name))
print(ctime)
#返回修改时间
mtime = datetime.fromtimestamp(os.path.getmtime(f_name))
print(mtime)

代码运行结果

text.txt
D:\creation\PythonStudy\Pythonproject\mypro01
D:\creation\PythonStudy\Pythonproject\mypro01\text.txt
106
2024-06-30 11:01:22.267132
2024-06-25 10:06:21.804224
2024-06-25 15:44:00.648589Process finished with exit code 0

参考书籍:《python从小白到大牛》(第2版)关东升 编著 


文章创作不易,本文接近6000字,为了大家能理解,写的很详细,这也让我花了很多时间。最后,如果觉得本文对大家有帮助的话,还请给我点个赞和关注,谢谢大家!!!

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

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

相关文章

<电力行业> - 《第9课:输电(二)》

4 输送电能流程 输送电能总共有:发电站→升压变压器→高压输电线→降压变压器→用电单位等五个流程。 电力工业初期,发电厂建在电力用户附近,直接向用户送电,所以那个时候只有发电和用电两个环节。 随着电力生产规模和负荷中心规…

烧结刚玉砂轮片 磨具用晶谷低温陶瓷结合剂玻璃粉

晶谷CBN 砂轮磨具用低温陶瓷结合剂玻璃粉的一些特点如下: - 软化点:通常为450~650度; - 膨胀系数:50~12010-7; - 粒径:300~3000目(可按要求订做); - 外观颜色&#xff…

h5兼容table ,如何实现h5在app内使用h5渲染table表格而且实现横屏预览?

压图地址 横屏div 通过css 实现 transform: rotate(90deg); transformOrigin: 50vw 50vw ; height: 100vw; width: 100vh;<divclass"popup-box":style"{transform: originSet 0 ? rotate(90deg) : ,transformOrigin: originSet 0 ? 50vw 50vw : ,height…

GuLi商城-商品服务-API-三级分类-删除-逻辑删除

注意&#xff1a;官方文档说logic配置可以省略&#xff0c;代码中直观些&#xff0c;配上吧 逻辑删除注解&#xff1a; 实体类字段上加逻辑删除注解&#xff1a; 启动nacos&#xff1a; 启动商品服务&#xff1a; postman测试&#xff1a; 数据库字段值改成了0&#xff0c;说明…

Linux----> tail、cat、more、head、less的用法详解

1.tail命令&#xff1a;用于查看文件的最后几行内容。 基本用法&#xff1a;tail [选项] [文件] 常用选项&#xff1a; -n <行数>&#xff1a;显示最后的 <行数> 行。-f&#xff1a;实时显示文件新增内容&#xff0c;通常用于查看日志文件。 示例&#xff1a;…

数据恢复篇:如何在没有备份的情况下从恢复已删除的照片

许多用户更喜欢将他们的私人照片保存在他们的 Android 设备上的一个单独的安全空间中&#xff0c;以确保他们的记忆不仅被存储&#xff0c;而且受到保护。这就是“安全文件夹”功能派上用场的地方。您可以使用 PIN 码、密码、指纹或图案锁定此文件夹&#xff0c;即使您的设备落…

[小试牛刀-习题练]《计算机组成原理》之数据信息的表示、运算方法与运算器

【数据信息的表示运算方法与运算器】 1、【机器码转换】X-0.11111111&#xff0c;X的补码是 1.00000001 。 最高位符号位为负值&#xff1a; 反码法——绝对值按位取反末位加一&#xff0c;1.000000000.000000011.00000001扫描法——从右往左找到第一个为1的&#xff…

常用字符串方法<python>

导言 在python中内置了许多的字符串方法&#xff0c;使用字符串方法可以方便快捷解决很多问题&#xff0c;所以本文将要介绍一些常用的字符串方法。 目录 导言 string.center(width[,fillchar]) string.capitalize() string.count(sub[,start[,end]]) string.join(iterabl…

ffmpeg编码图象时报错Invalid buffer size, packet size * < expected frame_size *

使用ffmpeg将单个yuv文件编码转为jpg或其他图像格式时&#xff0c;报错&#xff1a; Truncating packet of size 11985408 to 3585 [rawvideo 0x1bd5390] Packet corrupt (stream 0, dts 1). image_3264_2448_0.yuv: corrupt input packet in stream 0 [rawvideo 0x1bd7c60…

在本地和Linux之间传输文件

1.打开本地的cmd窗口 2. 然后按这个链接的说法在cmd中远程连接Linux&#xff08;技术|如何在 Linux 中使用 sFTP 上传或下载文件与文件夹&#xff09; 3. 看这个链接里面的sftp命令进行本地和Linux之间的文件互传 &#xff08;https://www.cnblogs.com/niuben/p/13324099.htm…

【嵌入式CLion】进阶调试——WSL下的Linux体验

说明&#xff1a; 1&#xff0c;这里所指的嵌入式其实是指嵌入式微控制器MCU&#xff0c;即单片机 2&#xff0c;万事开头难&#xff0c;本文目前提供了WSL工具链的搭建&#xff0c;后面会持续更新 一、启用RTOS集成 在搭建WSL工具链之前&#xff0c;先讲一下集成的RTOS功能&a…

D-MAX纠偏软件Fife MAX Terminal软件MAX-Oi软件

D-MAX纠偏软件Fife MAX Terminal软件MAX-Oi软件

SpringBoot的自动配置核心原理及拓展点

Spring Boot 的核心原理几个关键点 约定优于配置&#xff1a; Spring Boot 遵循约定优于配置的理念&#xff0c;通过预定义的约定&#xff0c;大大简化了 Spring 应用程序的配置和部署。例如&#xff0c;它自动配置了许多常见的开发任务&#xff08;如数据库连接、Web 服务器配…

通过Python脚本实现字符画

效果 讲解&#xff1a; 用于将3D视图的帧缓冲区转换为字符画&#xff0c;并将字符画输出到文本编辑器中。 首先&#xff0c;获取当前绑定的帧缓冲区、视口信息和视图像素。 然后&#xff0c;将像素矩阵转化为字符串&#xff0c;并将字符串写入到文本编辑器中。 设置文本编辑…

bmob Harmony快速开发手机号一键登录功能

最近用Bmob的鸿蒙SDK尝试了Harmony开发&#xff0c;做了一个几乎每个应用都会有的功能&#xff1a;手机号码短信验证码一键注册登录的功能&#xff0c;感觉简直爽的不要不要的&#xff0c;ArkUI可见即可得的UI交互设计体验&#xff0c;配合Bmob后端云一如既往简单易用的风格&am…

使用Perplexity打造产品的27种方式

ChatGPT和Perplexity等聊天机器人正迅速成为产品经理的首选助手。以下是一份全面的指南&#xff0c;介绍PM如何在日常工作中使用Perplexity&#xff0c;该指南基于300多份回复和30次电话后的总结。 理解并制定增长战略&#xff1a;例如&#xff0c;解释增长会计的基本原理&…

【Vue】——组件之间数据的传递

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…

【proteus经典实战】16X192点阵程序

一、简介 6X192点阵程序通常用于表示高分辨率图像或文字&#xff0c;其中16X表示像素阵列的宽度&#xff0c;192表示每个像素阵列中的点阵数&#xff0c;16X192点阵程序需要一定的编程知识和技能才能编写和调试&#xff0c;同时还需要考虑硬件设备的兼容性和性能等因素。 初始…

知识不成体系?这篇Mysql数据库将成为你的解忧杂货店!(子查询)

欢迎来到一夜看尽长安花 博客&#xff0c;您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论的问题可联系我&#xff1a;3329759426qq.com 。发布文章的风格因专栏而异&#xff0c;均自成体系&#xff0c;不足…

网线直连电脑可以上网,网线连tplink路由器上不了网

家里wifi网络连不上好几天了&#xff0c;用网线直连电脑可以上网&#xff0c;但网线连tplink路由器wan口上不了网&#xff0c;无Internet连接&#xff0c;网线连lan口可以电脑上网&#xff0c;手机上不了。 后来发现网线的主路由用的192.168.0.1&#xff0c;我的路由器wan口自…