Python教程(18)——python文件操作详解

Python文件操作

    • Python文件操作
      • 基础操作
        • 使用with语句管理文件
        • 处理文件操作的异常
        • 处理文件路径
    • 文本格式和二进制格式
        • 文本格式 (Text Mode)
        • 二进制格式 (Binary Mode)
        • 例子说明
    • 文件操作的相关函数

所谓的文件操作是指对计算机中的文件进行读取、写入、修改和删除等操作。简单来说可以分为以下三个部分:

  • 打开文件
  • 操作文件
  • 关闭文件

就是这三个简简单单的操作,却在计算机世界占有一席之地。打开文件有各种打开模式,各不相同;操作文件,有读写模式;关闭文件就比较简单了。
在这里插入图片描述

Python文件操作

基础操作

Python文件操作也是上面那三个步骤,主要包括打开文件、操作文件(读取文件、写入文件)和关闭文件等操作。

  1. 打开文件:使用open()函数打开一个文件,需要传入文件名和打开模式(如只读、写入等)。
file = open(file_path, mode)
  • file_path表示文件路径,可以是相对路径或绝对路径。
  • mode表示打开文件的模式,常见的模式有:
    • 'r':只读模式(默认)。
    • 'w':写入模式,会创建文件(如果不存在),覆盖原有内容。
    • 'a':追加模式,在文件末尾追加内容(如果文件存在)。
    • 'x':独占创建模式,只能用于新建文件,若文件已存在则报错。
    • 'b':二进制模式。
    • 't':文本模式(默认)。
    • '+':更新读写模式。
  1. 读取文件:使用read()方法读取文件内容,可以传入参数指定读取的字符数。
content = file.read()
print(content)
  • file.read()读取整个文件的内容。
  • file.readline():读取文件的一行内容。
  • file.readlines()读取文件所有行,返回一个包含行内容的列表。
  1. 写入文件:使用write()方法将内容写入文件。
file = open("example.txt", "w")
file.write("Hello, World!")
  1. 关闭文件:使用close()方法关闭文件。
file.close()

完整的代码示例:

# 打开文件
file = open("example.txt", "r")# 读取文件内容
content = file.read()
print(content)# 写入文件
file = open("example.txt", "w")
file.write("Hello, World!")# 关闭文件
file.close()

在实际使用中,需要注意一定要及时关闭文件,否则会资源浪费。

使用with语句管理文件

在进行文件操作时,使用 with 语句可以自动管理文件的打开和关闭,确保及时释放文件资源。

with open(file_path, mode) as file:# 文件操作代码

with 语句块中,可以执行文件的读取、写入等操作,当代码块结束时,文件会自动关闭,无需手动调用 file.close() 方法。

处理文件操作的异常

文件操作时可能会发生异常,为了保证代码的稳定性,可以使用 try-except-finally 语句来处理文件操作的异常。

try:file = open(file_path, mode)# 文件操作代码
except IOError:# 异常处理代码
finally:file.close()  # 确保关闭文件

使用 try 语句块进行文件操作,如果在操作过程中出现异常,可以通过 except 语句块捕获并处理异常。最后,无论是否发生异常,都会执行 finally 语句块来确保关闭文件。

处理文件路径

os.path 模块提供了一些函数来处理文件路径,包括获取文件名、扩展名、目录名等。

import osfile_name = os.path.basename(file_path)  # 获取文件名
dir_name = os.path.dirname(file_path)  # 获取目录名
split = os.path.split(file_path)  # 拆分目录和文件名
file_extension = os.path.splitext(file_path)[1]  # 获取文件扩展名

通过使用 os.path 模块的函数可以方便地获取文件路径的各个部分,对于处理文件操作时的路径相关需求非常实用。

文本格式和二进制格式

文件操作中,操作的文件对象一般有两种格式,文本格式和二进制格式。

文本格式 (Text Mode)
  • 文件以文本格式打开时,默认假设文件内容是可读的文本数据。
  • 在文本格式中,读取文件时会将字节数据按照特定的编码方式(如UTF-8)解码成字符串。
  • 写入文件时,会将字符串按照特定的编码方式编码为字节数据后存储到文件中。

文本格式通常用于处理文本文件,比如常见的文本文档、CSV文件、JSON文件等。

二进制格式 (Binary Mode)
  • 文件以二进制格式打开时,假设文件内容是字节数据,不关心其内容是否可读。
  • 在二进制格式中,读取文件时直接返回字节数据,不进行解码转换。
  • 写入文件时,将字节数据直接写入到文件中,不进行编码转换。

二进制格式通常用于处理非文本文件,如图像文件、音频文件、视频文件等。

例子说明

假设有一个图片文件 “image.jpg”,我们分别以文本格式和二进制格式打开该文件,来看看它们的区别。

with open('image.jpg', 'r') as file:content = file.read()print(content)

运行上述代码,会遇到错误,因为我们试图以文本格式打开一个图片文件,而图片文件是二进制数据,不适合以文本格式打开。

with open('image.jpg', 'rb') as file:content = file.read()print(content)

运行上述代码,可以成功以二进制格式读取图片文件,并打印出包含图片字节数据的内容。

以二进制格式读取图片文件时,我们可以对字节数据进行以下操作,将字节数据保存为另一个图片文件

with open('image.jpg', 'rb') as file:content = file.read()with open('new_image.jpg', 'wb') as new_file:new_file.write(content)

上述代码将读取的字节数据直接写入一个新的图片文件 “new_image.jpg” 中,实现了将原始图片复制到新文件的操作。

另外还可以对图片进行各种处理。

from PIL import Imagewith open('image.jpg', 'rb') as file:content = file.read()image = Image.open(io.BytesIO(content))
# 对图片进行各种处理操作

上面使用Pillow库将读取的字节数据转换成图像对象,然后可以对图像进行各种处理操作,如调整大小、改变颜色等。

所以需要注意的是,如果想读取或操作非文本数据,如图片、音频、视频等,应该使用二进制格式打开文件,以确保正确处理和操作二进制数据。

文件操作的相关函数

在Python当中,文件的操作方法很多。以下是一点整理的一些关于文件的操作的相关函数,这些方法可用于对文件进行各种操作。如果有错误的,欢迎大家指出。

方法名描述
open(file, mode)打开一个文件,并返回一个文件对象
close()关闭文件
read([size])读取文件的全部内容,可选参数size表示读取的最大字节数
readline()读取文件的一行内容
readlines()以列表形式返回文件的所有行
write(str)将字符串写入文件
writelines(sequence)给文件写入一个序列字符串
seek(offset[, whence])改变文件的当前位置
tell()返回文件的当前位置
truncate([size])将文件截断到指定的大小,可选参数size表示截断的字节数
flush()强制刷新文件缓冲区
fileno()返回文件的文件描述符
isatty()判断文件是否是一个终端设备

更多精彩内容,请关注同名公众:一点sir(alittle-sir)

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

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

相关文章

超赞的进度条控件

© 2012 Conmajia, 2011 Graham Wilson SN: 125.2 本文为 CodeProject 2011 年 4 月号最佳 C# 文章获奖作品。本中文版翻译已获原作者 Graham Wilson 首肯。 简介 本文介绍一款有趣的进度条控件(ProgressBar)。如下演示,这款名为“超赞进…

毫米波雷达:从 3D 走向 4D

1 毫米波雷达已广泛应用于汽车 ADAS 系统 汽车智能驾驶需要感知层、决策层、执行层三大核心系统的高效配合,其中感知层通过传感器探知周围的环境。汽车智能驾驶感知层将真实世界的视觉、物理、事件等信息转变成数字信号,为车辆了解周边环境、制定驾驶操…

基于OpenAI的Whisper构建的高效语音识别模型:faster-whisper

1 faster-whisper介绍 faster-whisper是基于OpenAI的Whisper模型的高效实现,它利用CTranslate2,一个专为Transformer模型设计的快速推理引擎。这种实现不仅提高了语音识别的速度,还优化了内存使用效率。faster-whisper的核心优势在于其能够在…

DCDC--电感的选择和影响

1、感值L的影响 1.1、纹波Ripple的影响:感值越大,纹波越小 1.2、负载瞬态响应Load Transient的影响:感值越大,负载瞬态响应越差 2、直流电阻DCR的影响 2.1、效率Efficiency的影响 相同型号,感值越大,DC…

浅学Vue3

安装 vue项目 npm init vuelatest 回车装包 npm install 路由 安装 Router npm install vue-router4 -S项目根目录新建 router --> index.js vue2中 index.jsimport Vue from vue; import VueRouter from vue-router; import Home from ../views/Home.vue;Vue.use(V…

2023年度总结:技术旅程的杨帆远航⛵

文章目录 职业规划与心灵成长 ❤️‍🔥我的最大收获与成长 💪新年Flag 🚩我的技术发展规划 ⌛对技术行业的深度思考 🤔祝愿 🌇 2023 年对我来说是一个充实而令人难以忘怀的一年。这一年,我在CSDN上发表了 1…

Arduino驱动VL6180X光学测距传感器(OLED显示)

Arduino驱动VL6180X光学测距传感器(OLED显示) 简介原理模块参数接线图代码结果 简介 VL6108X三合一光电模块,芯片内集成了IR VSEL(vertical-cavity surface-emitting laser)红外垂直腔面发射激光器光源、接近传感器、环境光传感器&#xff0…

Windows搭建RTMP视频流服务(Nginx服务器版)

文章目录 引言1、安装FFmpeg2、安装Nginx服务器3、实现本地视频推流服务4、使用VLC或PotPlayer可视化播放器播放视频5、RTSP / RTMP系列文章 引言 RTSP和RTMP视频流的区别 RTSP (Real-Time Streaming Protocol)实时流媒体协议。 RTSP定义流格式&#xff…

2023总结与展望--Empirefree

今年一篇博客都没写过了,好像完全在忙在工作和生活上面了,珍惜自我,保持热情,2024对我好点 文章目录 🔥1. 年终总结1.1.学习工作计划1.2. 生活计划1.3 个人总结 🔥2. 未来展望 🔥1. 年终总结 1…

MySQL函数、AVG | MIN | MAX | COUNT | SUM、慢查询

MySQL函数、慢查询 1、函数1.日期函数2.两个日期的时间差3.查询距离时间的间隔时间4.常用的字符串函数5.常用的数学函数6.常用的聚合函数 2、慢查询1.什么是慢查询? 从需求出发,在数据的操作过程中经常会有以下的问题;求和、最大值、最小值、…

未来十年,量子计算将改变物流行业

近年来,供应链和物流行业面临的挑战越来越多,从劳动力短缺到无法预测的天气以及供需变化,都使物流行业变得更加复杂。 因此,现在急需一种不同的方法来解决这些挑战,优化单个功能或整个业务的传统方法已无法应对这些困…

Mysql使用Mybatis进行时间操作

MySQL中支持以下日期时间类型: DATE:存储年月日(例如:2023-04-05)。范围从"1000-01-01"到"9999-12-31" TIME:存储时分秒(例如:11:22:22)。范围从&q…

Authing 分级管理员重磅上线,实现权限超细粒度分级管

数字化时代企业的现代化建设日益重要,身份权限管理系统的数字化变革已经成为企业数字化转型的核心要素之一,同时也对身份权限管理的“最后一公里”提出了更高的要求。管理员作为关键人员,往往掌握整个企业的数据核心访问权限,需要…

Seata AT TM->RC->RM一次完整的交互过程

原理 TM两阶段: 阶段1:TM向TC申请全局事务,netty客户端发起了一次记录xid的请求 阶段2:TC协调之后,决定执行RM是否提交或者回滚。 spring公共组件部分 1、SeataAutoConfiguration类加载 利用springboot自动装配机…

js实现前端下载图片和文件资料

说明:下载图片和文档资料是两种不同的方式,所以需要先判断下载的是图片还是word,excel等文件资料 目录 1.文件资料下载: 2.图片资源下载 1.文件资料下载: window.location.href 文件路径; handleClick(item) {let…

如何使用Spoofy检测目标域名是否存在欺骗攻击风险

关于Spoofy Spoofy是一款功能强大的域名安全检测工具,在该工具的帮助下,广大研究人员可以轻松检测单个目标域名或域名列表中的域名是否存在遭受欺诈攻击的风险。 该工具基于纯Python开发,可以根据SPF和DMARC记录来检测和判断目标域名是否可…

C++ 类和对象 (上)

类的引入: 由于C语言是面向过程的编程语言,我们在完成一件事的时候通常习惯将一件事拆分成一个一个小过程来实现,而到了C就习惯将一件事分成不同的模块,交给不同的对象来处理,每一个对象中承载着数据类型和函数。 &am…

Jackson进行Json反序列化对于一个小写字母开头后跟大写字母无法识别反序列成功问题

问题描述 json数据:{“pTargetId”:“123”} javaBean: Datapublic static class Test {private String pTargetId;}运行下面代码: public static void main(String[] args) throws JsonProcessingException {String json "{\"pT…

We are a team - 华为OD统一考试

OD统一考试 题解&#xff1a; Java / Python / C 题目描述 总共有 n 个人在机房&#xff0c;每个人有一个标号 (1<标号<n) &#xff0c;他们分成了多个团队&#xff0c;需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中&#xff0c;具体的: 消息构成为 a b …

智慧启航:机场管理系统的革新与飞机航天展馆的视觉盛宴

随着科技的飞速发展&#xff0c;我们的生活方式正在不断地被改变和提升。而在航空领域&#xff0c;这种变化则更加明显。从机场的智慧管理系统大屏&#xff0c;到飞机航天展馆的三维可视化&#xff0c;再到飞机涡轮发动机的3D模型&#xff0c;科技的力量正在带我们进入一个前所…