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 os

file_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 Image

with 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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安装DataEase(Linux线上安装)修改端口

问题一:端口更改 警告本解决方法仅仅应急,如果找到了更好的方法请通知我,感谢你的理解!!! 为了让mysql与dataease的端口不发生冲突,将 MySQL 外部运行端口参数 ${DE_MYSQL_PORT} 改为新端口&am…

一篇文章掌握 NestJS 所有的生命周期以及生命周期的执行时机

前言 NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架,它使用 TypeScript 作为开发语言,也支持原生的 JavaScript。在 NestJS 中,生命周期事件是一个重要的概念。在我们构建和管理应用程序时,有时需要在特定…

JUC常用并发工具类

JUC常用并发工具类 1、什么是JUC? JUC 就是 java.util.concurrent 包,这个包俗称 JUC,里面都是解决并发问题的一些东西,该包的位置位于 java 下 面的 rt.jar 包下面。 2、4大常用并发工具类 2.1 CountDownLatch CountDownLatch&#x…

[Angular] 笔记 17:提交表单 - ngSubmit

Submitting Forms (ngSubmit) 表单的一般完整写法: 如果表单验证失败,必须 disable 提交按钮,阻止用户提交不合法的数据。 提交表单后,与表单对应的 json 数据 post 到后端: {"id":1,"name":…

Windows上安装NodeJs

Windows上安装NodeJs 一、操作环境 操作系统: Windows 10 专业版 SDK:NodeJs v16.19.1(安装鸿蒙IDE自动安装的NodeJs) 二、安装过程 2.1下载Node.js安装包 官网下载地址: 下载历史版本安装也可 2.2 双击下载好的安装文件 2.3 打开下载…

从SLSA看软件供应链面临哪些威胁及对应解决方案

引言:软件制品供应链等级SLSA(Supply-chain Levels for Software Artifacts)是由由谷歌发起,基于行业共识建立的一个逐步完善供应链安全的规范。本文基于Google SLSA框架来看软件供应链安全面临的安全风险。 1. 简介 2023 年 4 月…

Educational cf 160的B题

Problem - B - Codeforces 找到最小操作次数,使得子串对应位与原来字符串对应位不相同。 交换是没有代价的,但是删除有代价。 首先复制两个一模一样的串,我们把下面作为固定串,然后对串中0和1的个数进行计数,由于我…

CEC2017(Python):五种算法(SSA、RFO、OOA、PSO、GWO)求解CEC2017

一、5种算法简介 1、麻雀搜索算法SSA 2、红狐优化算法RFO 3、鱼鹰优化算法OOA 4、粒子群优化算法PSO 5、灰狼优化算法GWO 二、CEC2017简介 参考文献: [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem defin…

(001)Unit 编译 UTF8JSON

文章目录 编译 Dll编译报错附录 编译 Dll 新建工程: 注意 UnityEngineDll 的选择!2022 版本的太高了!!! 下载包,导入unity : 3. 将 unf8json 的源码拷贝到新建的工程。 4. 编译发布版本: 编译…

做抖店的话营业执照要办什么类型?法人必须是本人信息?问题解答

我是王路飞。 想在抖音开店的新手,好像对抖音个人店有一种迷之追求。 先劝告你们一句,贪小便宜容易吃大亏。 抖音个人店并不适合新手开通,它重在“试运营”这三个字,新手不仅无法正常把店铺做起来,而且后续还要把对…

MPLS动态协议LDP配置示例

一、预习: MPLS是一种根据报文中携带的标签来转发数据的技术,两台LSR必须在它们之间转的数据 的标签使用上“达成共识”。LSR之间可以运行LDP来告知其他LSR本设备上的标签绑定信息,从而实现标签报文的正确转发。 LSR:Label Switch…

在Java中输入连续三个数字并进行升序排序

思想 使用for循环对数组中的元素进行排序:需要创建数组,然后使用for循环进行比较,再者对排序后的元素进行输出。 代码 import java.io.*; import java.util.*; public class Sequence {public static void main(String[] args) throws IO…

javascript之location常用属性和方法

文章目录 前言为什么使用location的属性和方法呢?属性展示hrefhosthostnameportprotocolpathname 方法展示replace(url)assign(url)reload()toString() 总结属性总结:方法总结: 前言 本章学习的是location常用属性和方法 为什么使用location的…

C#多条件排序OrderBy、ThenBy

方法和效果 有多个排序条件,其实不用单独自己写排序方法的,C#内置了排序方法: 引用命名空间System.Linq 正向排序的方法:OrderBy首要条件;ThenBy次要条件,可以连续多个使用 同理,逆向排序对应…

探秘交互设计:深入了解五大核心维度!

交互式设计是用户体验(UX)设计的重要组成部分。本文将解释什么是交互设计,并分享一些有用的交互设计模型,并简要描述交互设计师通常做什么。 如何解释交互设计 交互式设计可以用一个简单的术语来理解:它是用户和产品…

新火种AI|AI正在让汽车成为“消费电子产品”

作者:一号 编辑:小迪 AI正在让汽车产品消费电子化 12月28日,铺垫许久的小米汽车首款产品——小米SU7正式在北京亮相。命里注定要造“电车”的雷军,在台上重磅发布了小米的五大自研核心技术。在车型设计、新能源技术以及智能科技…

Python中使用SQLite数据库的方法2-1

1 SQLite数据库简介 SQLite数据库是一种轻量级的、优秀的开源关系型数据库。它使用Python的标准库实现,并且存储数据库在普通文件中。这些文件在不同机器和操作系统之间是可以移植的,在很多安卓手机中,也是把SQLite作为嵌入数据库使用。 2 …

暗光增强——Zero-DCE网络推理测试

目录 一、Zero-DCE方法1.1 网络优点1.2 网络适用场景1.3 网络不适用场景 二、源码包三、测试四、测试结果五、推理速度六、总结 一、Zero-DCE方法 Zero-DCE(Zero-Reference Deep Curve Estimation)是一种用于低光照增强的网络。 1.1 网络优点 无需参考…

昇腾910平台安装驱动、固件、CANN toolkit、pytorch

本文使用的昇腾910平台操作系统是openEuler,之前没了解过,不过暂时感觉用起来和centOS差不多。系统架构是ARM,安装包基本都是带aarch64字样,注意和x86_64区别开,别下错了。 安装依赖 cmake 通过yum安装的cmake版本较…

华为发布《智能世界2030》思维导图笔记

华为发布《智能世界2030》思维导图笔记