Python 如何读取和写入文件

Python 如何读取和写入文件

文件操作是编程中常见的任务,几乎所有编程语言都支持文件的读写功能。在 Python 中,文件操作简单直观,适用于从初学者到经验丰富的开发者。无论是处理小型文本文件,还是需要处理大型数据文件,Python 提供了丰富的工具和方法来完成这些任务。

本文将带你了解如何在 Python 中读取和写入文件,解释不同的文件模式,并展示如何使用 Python 提供的内置函数高效地进行文件操作。
在这里插入图片描述

一、文件的基本概念

文件可以看作是存储在硬盘上的数据集合,它有一个文件名和路径。文件可以是文本文件,也可以是二进制文件。文本文件以人类可读的字符存储数据,比如 .txt 文件;而二进制文件存储的是计算机能够识别的二进制数据,如 .jpg 图片文件、.exe 可执行文件等。

在 Python 中,文件操作的核心步骤可以分为以下几步:

  1. 打开文件:使用 open() 函数打开文件。
  2. 读写文件:根据需求,进行文件的读取或写入。
  3. 关闭文件:文件操作完成后,使用 close() 函数关闭文件。

1.1 文件模式

Python 的 open() 函数用于打开文件,它需要两个参数:文件名和文件模式。文件模式决定了文件是以读、写还是其他模式打开。常见的文件模式有:

  • r:以只读模式打开文件。文件必须存在,否则会报错。
  • w:以写模式打开文件。如果文件不存在,会创建新文件;如果文件存在,则会清空文件内容。
  • a:以追加模式打开文件。如果文件不存在,会创建新文件;如果文件存在,数据会追加到文件末尾。
  • b:以二进制模式打开文件。适用于非文本文件(如图片、音频等)。
  • t:以文本模式打开文件(默认值)。
  • r+:以读写模式打开文件,允许读取和写入。

例如,以下是使用 open() 函数以只读模式打开一个文本文件的代码:

file = open('example.txt', 'r')

二、读取文件

Python 提供了几种不同的方式来读取文件内容。根据需求的不同,我们可以一次读取整个文件、一行行读取,或者按字节读取。

2.1 读取整个文件

最简单的读取方式是使用 read() 方法,它会将文件的全部内容作为字符串读取出来:

with open('example.txt', 'r') as file:content = file.read()print(content)
  • with 语句:推荐使用 with 语句来处理文件操作,它能够确保文件在使用完毕后自动关闭,避免手动调用 file.close()
  • read():一次性读取整个文件内容。

2.2 逐行读取文件

如果文件较大,我们可以选择逐行读取,以节省内存。Python 提供了 readline()readlines() 方法:

  • readline():每次只读取文件中的一行。
  • readlines():读取所有行,并返回一个包含每行内容的列表。
with open('example.txt', 'r') as file:for line in file:print(line.strip())  # strip() 去除行尾的换行符

这段代码使用 for 循环逐行读取文件内容,并去除每行末尾的换行符。

2.3 读取固定大小的内容

有时我们可能只需要读取文件的一部分内容,可以使用 read(size) 方法来读取指定字节数的数据。

with open('example.txt', 'r') as file:chunk = file.read(100)  # 读取文件的前 100 个字符print(chunk)

这种方法适用于需要处理较大文件的场景,避免一次性读取整个文件导致内存占用过高。

2.4 读取二进制文件

当处理非文本文件时(如图片、音频等),我们需要以二进制模式打开文件并读取其内容。

with open('image.jpg', 'rb') as file:binary_data = file.read()print(binary_data)  # 打印二进制数据

在这个例子中,我们以 rb 模式打开文件,表示以二进制读取模式。

三、写入文件

与读取文件类似,Python 也提供了多种方法来写入文件。根据文件模式的不同,写入时可以选择覆盖文件或向文件末尾追加内容。

3.1 写入新文件

使用 w 模式可以创建一个新的文件,或者清空已有文件的内容并重新写入数据。

with open('output.txt', 'w') as file:file.write('这是写入文件的一行文本。\n')file.write('这是另一行文本。\n')
  • write() 方法:将字符串写入文件。
  • 注意:使用 w 模式时,如果文件已存在,文件内容会被清空。

3.2 追加内容

如果我们希望向已有文件中添加新内容,而不是覆盖现有内容,可以使用 a 模式。

with open('output.txt', 'a') as file:file.write('这是追加的一行文本。\n')

这种方式常用于记录日志或保存处理结果。

3.3 写入二进制文件

处理二进制文件时,需要以二进制模式写入。下面是写入二进制数据的示例:

with open('output.bin', 'wb') as file:file.write(b'\x00\xFF\x10')  # 写入二进制数据

这里的 b 前缀表示字节序列,即二进制数据。

四、文件的其他操作

除了读取和写入,Python 还提供了许多其他文件操作函数,用于管理文件系统中的文件。

4.1 检查文件是否存在

在进行文件操作之前,通常我们需要确认文件是否存在。可以使用 os.path 模块中的 exists() 函数来检查文件是否存在。

import osif os.path.exists('example.txt'):print('文件存在')
else:print('文件不存在')

4.2 删除文件

要删除文件,可以使用 os.remove() 函数:

import osif os.path.exists('example.txt'):os.remove('example.txt')print('文件已删除')
else:print('文件不存在')

4.3 重命名文件

重命名文件可以使用 os.rename() 函数:

import osos.rename('old_name.txt', 'new_name.txt')
print('文件已重命名')

4.4 获取文件信息

使用 os.stat() 可以获取文件的详细信息,包括文件大小、创建时间等。

import osfile_info = os.stat('example.txt')
print(f"文件大小: {file_info.st_size} 字节")

五、文件操作中的异常处理

在进行文件操作时,可能会遇到文件不存在、权限不足等错误。为确保程序在异常情况下不会崩溃,通常需要进行异常处理。

try:with open('nonexistent_file.txt', 'r') as file:content = file.read()
except FileNotFoundError:print('文件未找到,请检查文件名和路径。')
except PermissionError:print('权限不足,无法访问文件。')

通过 try-except 语句,我们可以捕获文件操作中的常见异常并进行相应处理。

六、总结

在本文中,我们介绍了 Python 中文件的读取和写入方法,详细解释了文件模式、如何处理文本文件和二进制文件,并演示了各种常见的文件操作如追加内容、删除文件、重命名文件等。

通过掌握这些基本的文件操作技能,你可以轻松处理文件数据,无论是记录日志、保存用户数据,还是处理复杂的文件格式。在实际项目中,文件读写是非常常见的操作,理解这些操作的基本概念和应用场景能够帮助你编写更加健壮和灵活的 Python 程序。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

fo-dicom是如何实现DICOM 的网络通信功能

一、前言 前面的文章,我们介绍了fo-dicom是一个怎样的开源库等一些内容: fo-dicom,第一个基于.NET Standard 2.0 开发的DICOM开源库fo-dicom开源库是如何满足 DICOM标准的基本要求fo-dicom开发之DICOM数据解析:常见数据类型及处…

【Transformers基础入门篇2】基础组件之Pipeline

文章目录 一、什么是Pipeline二、查看PipeLine支持的任务类型三、Pipeline的创建和使用3.1 根据任务类型,直接创建Pipeline,默认是英文模型3.2 指定任务类型,再指定模型,创建基于指定模型的Pipeline3.3 预先加载模型,再…

pycharm恢复两边侧边栏常驻显示

问题: pycharm两边的侧边栏菜单默认不显示(打开project还得用alt1快捷键),非常不方便,如下图: pycharm版本:2022.3 professional 勾选:setttngs -> Appearance -> tool Wind…

云原生虚拟化kubevirt安装

kubevirt 介绍 Kubevirt 是 Redhat 开源的一套以容器方式运行虚拟机的项目,通过 kubernetes 云原生方式来管理虚拟机生命周期。它通过使用自定义资源(CRD)和其它 Kubernetes 功能来无缝扩展现有的集群,以提供一组可用于管理虚拟机…

JavaScript的注释与常见输出方式

注释 源码中注释是不被引擎所解释的,它的作用是对代码进行解释。Javascript 提供两种注释的写法:一种是单行注释,用//起头;另一种是多行注释,放在/*和*/之间。 单行注释: //这是单行注释 多行注释: /*这是 多行 注…

远程升级,你成功了吗?

最近又遇到了远程升级失败的情况,而且是不明原因的多次接连失败。。。 事情是这样的:最近有客户反馈在乡村里频繁出现掉线的情况。通过换货、换SIM卡对比排查测试,发现只有去年5月22号采购的那批模块在客户环境附近会出现掉线的情况&#xf…

服务器操作系统【sar 命令】

sar 安装、语法参数说明以及示例 文章目录 功能概述一、功能介绍1.安装配置2. 配置3. 启动二、sar 语法及参数说明三、示例及释义1.汇报 io 传输速率信息2.内存分页信息3.块设备状态信息4.hugepages 利用率统计信息5.列长度和负载平均值6.内存利用率统计信息7.swap 交换空间利用…

Redis数据持久化总结笔记

Redis 是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以 Redis 提供了持久化功能! Redis 提供了 2 个不同形式的持久化方式 RDB(Redis DataBase&#…

VS2019配置Open3Dv0.18.0版本库

文章目录 一、引言二、配置过程三、举个例子参考资料一、引言 现在如果直接使用vs2019对Open3D(v0.15.2)进行编译,会比较麻烦,一是需要科学上网,另一个就是容易出现错误,这里就仍然按照之前的思路来配置新版本的Open3D(VS2015(及以上版本)配置Open3Dv0.15.2版本库)。 二…

科研小白入门工具

三、科研绘图 1.流程图绘制工具:powerpoint、亿图图示、visio、draw.io 2.绘制标准:布局合理、色彩鲜明、字体大小、矢量输出 矢量图绘制推荐流程:亿图图示绘制--visio--word--pdf无损放大 3.文章插图:excel、origin、matlab、…

【JUC并发编程系列】深入理解Java并发机制:Volatile从底层原理解析到高级应用技巧(六、Volatile关键字、JMM、重排序、双重检验锁)

文章目录 【JUC并发编程系列】深入理解Java并发机制:Volatile从底层原理解析到高级应用技巧(六、Volatile关键字、JMM、重排序、双重检验锁)1. Volatile的特性2. Volatile的用法3. CPU多核硬件架构剖析4. JMM内存模型4.1 主要特性4.2 JMM 的工作原理4.3 实现机制 5.…

电商跨境电商商城系统/网上商城接口/电商数据接口详情

电商API接口背景:电商运营中,数据分析这项工作越来越重要,许多品牌方也越来越热衷去做电商数据分析。不过,全面的数据该如何获取呢,此时,电商数据接口的重要性便凸显出来了。 电商API数据接口主要有以下特…

ASP.NET Core8.0学习笔记(十九)——EF Core DbSet

一、DbSet概述 1.DbSet提供了通过DbContext对表进行查询操作的路径。DbSet对应的属性名称将默认映射为实体T的表名。 2.使用DbSet<T>进行查询的方法&#xff1a; (1)直接在DbContext中创建对应的DbSet<T>属性 (2)使用DbSet DbContext.Set<T>方法操作数据表。…

对c语言中的指针进行深入全面的解析

1.普通的指针: 实际上指针就是存放地址的变量&#xff0c;eg: int a10; int *p&a; 拆分一下int *中的*说明p是一个指针&#xff0c;int是它所指向的类型&#xff1b; 2.字符串指针和字符串数组 char*str1"abcd"; 先看这一个&#xff0c;这个就是一个字符串…

[vulnhub] Hackademic.RTB1

第一次打靶机&#xff0c;思路看的红队笔记 https://www.vulnhub.com/entry/hackademic-rtb1,17/ 环境&#xff1a;kali Linux - 192.168.75.131&#xff0c;靶机 - 192.168.75.132 主机发现和端口扫描 扫描整个网络有哪台机子在线&#xff0c;不进行端口扫描 nmap -sP 192.16…

关于API概念:连接数字世界的桥梁

在数字化时代&#xff0c;信息和数据的流动是构建现代应用程序的基础。API&#xff08;应用程序编程接口&#xff09;作为连接不同软件和服务的桥梁&#xff0c;正逐渐成为现代技术架构中不可或缺的一部分。本文将探讨API的概念、重要性以及它如何塑造我们的数字生活。 什么是A…

解决Echarts:宽度100%,渲染的宽度却是100px

为什么我们宽度设置了100%&#xff0c;结果变为了100px&#xff1f; 源码这里没有获取到clientWidth&#xff0c;会将设置的width:100%转换称100px 解决办法&#xff1a; <div ref"numberPieRef"></div>let numberPieRef ref(null); let myChart nu…

基于二自由度汽车模型的汽车质心侧偏角估计

一、质心侧偏角介绍 在车辆坐标系中&#xff0c;质心侧偏角通常定义为质心速度方向与车辆前进方向的夹角。如下图所示&#xff0c;u为车辆前进方向&#xff0c;v为质心速度方向&#xff0c;u和v之间的夹角便是质心侧偏角。 质心侧偏角的作用有如下三点&#xff1a; 1、稳定性…

深度学习之表示学习 - 贪心逐层无监督预训练篇

引言 在人工智能的浩瀚星空中&#xff0c;深度学习以其强大的数据处理与模式识别能力&#xff0c;成为了一颗璀璨的明星。而表示学习&#xff0c;作为深度学习的核心基石之一&#xff0c;正引领着这一领域不断突破边界。表示学习旨在将原始数据转换为更加抽象、更有意义的特征…

【51实物与仿真】基于51单片机设计的波形/函数发生器(正弦波、锯齿波、三角波、矩形波,设定频率步进值,改变振幅,LCD显示)——文末完整资料链接

基于51单片机设计的波形函数发生器 演示视频: 功能简介: 1.本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用,可任选)单片机。 2.LCD1602液晶显示波形种类和频率值(10-100HZ)。 3.按键设置波形种类和设定频率步进值。 4.电位器器改变振幅(0V-3.5V稳定)。 5…