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

Python 文件读写

Python 文件读写笔记整理

 

参数说明

open(path, flag[, encoding][,errors])

path:要打开文件的路径

flag:打开方式

encoding:编码方式

errors:错误处理

Flag打开方式表

模式

描述

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。

w

打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

w+

打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

打开文件

设置测试文件

创建一个test.txt文件,并在其中输入一些内容。

如下:

打开文件示例

使用r(只读方式)打开test.txt,设置打开编码格式为utf-8。

示例如下:

# 设置文件路径
path = 'test.txt'f = open(path, 'r', encoding='utf-8')

读取忽略错误

可通过设置errors=’ignore’来忽略读取的错误。

示例如下:

# errors=ignore 忽略错误
f = open(path, 'r', encoding='utf-8', errors='ignore')

读取文件

读取全部内容

使用文件的read()方法,可用于读取文件中所有内容。

示例如下:

f = open(path, 'r', encoding='utf-8')
print(f.read())# 执行结果
# 及至始皇,奋六世之余烈,振长策而御宇内,吞二周而亡诸侯,履至尊而制六合,执敲扑而鞭笞天下,威振四海。
# 南取百越之地,以为桂林、象郡;百越之君,俯首系颈,委命下吏。
# 乃使蒙恬北筑长城而守藩篱,却匈奴七百余里。
# 胡人不敢南下而牧马,士不敢弯弓而报怨。

 

忽略错误应用

当出现因为读取文件编码格式产生错误时,可使用errors=ignore来忽略报错,继续读取。

示例如下:

f = open(path, 'r', encoding='gbk')
print(f.read())

因为编码文件为utf-8格式,但使用gbk时会抛出错误:

Traceback (most recent call last):File "E:\lianxipy\day3\文件读写.py", line 17, in <module>print(f.read())
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 2: illegal multibyte sequence

使用忽略错误

示例如下:

f = open(path, 'r', encoding='gbk', errors='ignore')
print(f.read())# 执行结果
# 銆銆鍙婅嚦濮嬬殗锛屽嬪叚涓栦箣浣欑儓锛屾尟闀跨瓥鑰屽尽瀹囧唴锛屽悶浜屽懆鑰屼骸璇镐警锛屽饱鑷冲皧鑰屽埗鍏鍚堬紝鎵ф暡鎵戣岄灜绗炲ぉ涓嬶紝濞佹尟鍥涙捣銆
# 鍗楀彇鐧捐秺涔嬪湴锛屼互涓烘傛灄銆佽薄閮★紱鐧捐秺涔嬪悰锛屼刊棣栫郴棰堬紝濮斿懡涓嬪悘銆
# 涔冧娇钂欐伂鍖楃瓚闀垮煄鑰屽畧钘╃憋紝鍗村寛濂翠竷鐧句綑閲屻
# 鑳′汉涓嶆暍鍗椾笅鑰岀墽椹锛屽+涓嶆暍寮寮撹屾姤鎬ㄣ

因为编码格式的问题,虽然也能读取出来但都是乱码。

读取整行

读取整行,包括“\n”字符。

示例如下:

print(f.readline())# 执行结果
# 及至始皇,奋六世之余烈,振长策而御宇内,吞二周而亡诸侯,履至尊而制六合,执敲扑而鞭笞天下,威振四海。

读取指定字符数

可使用文件的read(num)或readline(num)方法中传递num参数来获取指定字符数。

示例如下:

print(f.read(6))
# 执行结果
#  及至始皇 # 测试文件开头处有两个空格print(f.readline(6))
# 执行结果
# ,奋六世之余

读取所有行

读取所有行,并返回列表。

示例如下:

print(f.readlines())# 执行结果
# ['\u3000\u3000及至始皇,奋六世之余烈,振长策而御宇内,吞二周而亡诸侯,履至尊而制六合,执敲扑而鞭笞天下,威振四海。\n',
# '南取百越之地,以为桂林、象郡;百越之君,俯首系颈,委命下吏。\n',
# '乃使蒙恬北筑长城而守藩篱,却匈奴七百余里。\n',
# '胡人不敢南下而牧马,士不敢弯弓而报怨。']

若给定的数字大于0,返回实际size字节行数。

示例如下:

print(f.readlines(60))
# 执行结果
# ['\u3000\u3000及至始皇,奋六世之余烈,振长策而御宇内,吞二周而亡诸侯,履至尊而制六合,执敲扑而鞭笞天下,威振四海。\n', '南取百越之地,以为桂林、象郡;百越之君,俯首系颈,委命下吏。\n']

设置文件当前位置

使用file.seek(offset) 设置文件读取的当前位置。

示例如下:

print(f.read(3))
print(f.read(3))# 设置读取当前位置回到开始位置
f.seek(0)
print(f.read(3))# 执行结果
#   及
# 至始皇
#   及

关闭文件

file.close() 关闭文件。关闭后文件不能再进行读写操作。

示例如下:

print(f.read())
f.close()# 关闭文件后在读取文件
print(f.read())

执行结果:

  及至始皇,奋六世之余烈,振长策而御宇内,吞二周而亡诸侯,履至尊而制六合,执敲扑而鞭笞天下,威振四海。
南取百越之地,以为桂林、象郡;百越之君,俯首系颈,委命下吏。
乃使蒙恬北筑长城而守藩篱,却匈奴七百余里。
胡人不敢南下而牧马,士不敢弯弓而报怨。
Traceback (most recent call last):File "E:\lianxipy\day3\文件读写.py", line 71, in <module>print(f.read())
ValueError: I/O operation on closed file.

写入文件

字符串写入

file.write(str) 将字符串写入文件,返回的是写入的字符长度。

示例如下:

path = 'test.txt'
f = open(path, 'a+', encoding='utf-8')
print(f.write("过秦论\n"))# 文件内容会首先写入缓冲区 等需要关闭后 内容才会写入文件
f.close()

序列字符串写入

file.writelines(sequence) 向文件写入一个序列字符串列表。

如果需要换行则要自己加入每行的换行符。

示例如下:

path = 'test.txt'
f = open(path, 'a+', encoding='utf-8')
sequence = ["过\n", "秦\n", "论\n"]
print(f.writelines(sequence))# 文件内容会首先写入缓冲区 等需要关闭后 内容才会写入文件
f.close()

文件写入缓冲区验证

使用休眠程序来演示不关闭程序时,内容只是写入缓冲区,而不是写入文件。

示例如下:

path = 'test.txt'
f = open(path, 'w', encoding='utf-8')f.write('张三有两个哥哥')# 使用休眠程序 来演示不关闭程序时 内容不会写入文件
num = 1
while num < 10:time.sleep(1)num += 1print(num)continue
f.close()

可通过查看test.txt发现在10秒后,while循环退出后才写入到文件中,内容之前一直存在缓冲区。

刷新缓冲区

内容写入文件的三种原因:

1.文件关闭

2.缓冲区空间装满了,自动刷新

3.刷新缓冲区

下面试一下主动刷新缓冲区。

示例如下:

path = 'test.txt'
f = open(path, 'w', encoding='utf-8')
f.write("--- START --- \n")
num = 1
while num < 10:time.sleep(1)num += 1# 刷新缓冲区f.flush()f.write("这是刷新缓冲区 %d \n" % num)print(num)continue
f.write("--- END -- \n")
f.close()

效果:

可查看到休眠程序并没有影响到文件的每秒写入内容。

文件读写完整过程

一个文件读写完整过程:

设置路径、读写方式、编码方式及忽略错误。

还需要把对文件的操作进行防止异常处理,文件打开后正常操作结束后需要关闭文件,但有些错误还是会抛出,无法向下执行关闭处理;所以需要异常处理的finally无论是否报错都要执行关闭文件。

示例如下:

path = 'test.txt'
# 打开文件
f = open(path, 'r+', encoding='utf-8', errors='ignore')
try:# 对文件进行读写操作print(f.read())print(f.write('过秦论'))
finally:# 关闭文件f.close()

优化

优化为使用with open() as打开文件,

这些try-finally已经封装到操作中。

如果出现异常后会直接关闭文件,不会丢失之前写入的内容;

且只使用一行就可以处理。

示例如下:

path = 'test.txt'
with open(path, 'r+', encoding='utf-8', errors='ignore') as f:print(f.read())print(f.write('过秦论'))

总结

主要是python 文件读写的方法、参数、整体过程及其示例的笔记整理。

相关文章:

Python 文件读写

Python 文件读写笔记整理 参数说明 open(path, flag[, encoding][,errors]) path:要打开文件的路径 flag:打开方式 encoding:编码方式 errors:错误处理 Flag打开方式表 模式 描述 r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 rb 以二进制格…...

线性分组码的奇偶校验矩阵均匀性分析

回顾信道编解码知识&#xff0c;我们知道信道编码要求编码具有检纠错能力&#xff0c;作为FEC&#xff08;forward error correction&#xff09;前向纠错编码的一类&#xff0c;线性分组码表示校验位与信息位的关系能够线性表示。 在这篇文章中&#xff0c;并不是要讨论信道编…...

leetcode算法之链表

目录 1.两数相加2.两两交换链表中的节点3.重排链表4.合并K个升序链表5.K个一组翻转链表 1.两数相加 两数相加 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(…...

2023.11.27 滴滴P0级故障或为k8s升级造成

滴滴11.27 P0级故障|打车|宕机|网约车|出租车|滴滴出行|系统故障_网易订阅 (163.com) 如何看待滴滴11月27日故障&#xff0c;对日常生产生活有哪些影响&#xff1f; - 知乎 (zhihu.com) 最新消息滴滴P0故障原因&#xff0c;是由于k8s集群升级导致的&#xff0c;后面又进行版本…...

Ubuntu16.04.4系统本地提权实验

目录 1.介绍&#xff1a; 2.实验&#xff1a; 3.总结&#xff1a; 1.介绍&#xff1a; 1.1&#xff1a;eBPF简介&#xff1a;eBPF(extendedBerkeleyPacketFilter)是内核源自于BPF的一套包过滤机制&#xff0c;BPF可以理解成用户与内核之间的一条通道&#xff0c;有非常强大的…...

Vue中使用正则表达式进行文本匹配和处理的方法

1. 正则表达式基础 正则表达式是一种用来匹配字符串的模式。它由普通字符&#xff08;例如字符 a 到 z&#xff09;和特殊字符&#xff08;称为"元字符"&#xff09;组成。以下是一些基本的正则表达式示例&#xff1a; 匹配邮箱的正则表达式&#xff1a; /^[\w-](\…...

php许愿墙代码包括前端和后端部分

以下是一个简单的PHP许愿墙代码示例&#xff0c;包括前端和后端部分&#xff1a; 前端HTML代码&#xff08;index.html&#xff09;&#xff1a; <!DOCTYPE html> <html> <head><title>许愿墙</title> </head> <body><h1>许…...

PHP 刷新缓存区的问题!

PHP流式输出&#xff0c;在Nginx下可以正常刷新缓存区 &#xff0c; 但是在Apache下会等待循环全部执行完&#xff0c;才会刷新&#xff01;有怎么解决&#xff1f; header(X-Accel-Buffering: no); // Nginx情况下必须加这一行header(Content-type: text/event-stream);header…...

Android Studio Giraffe-2022.3.1-Patch-3安装注意事项

准备工作&#xff1a; android studio下载地址&#xff1a;https://developer.android.google.cn/studio/releases?hlzh-cn gradle下载地址&#xff1a;https://services.gradle.org/distributions/ 比较稳定的网络环境&#xff08;比较android studio相关的依赖需要从谷歌那边…...

【古月居《ros入门21讲》学习笔记】14_参数的使用与编程方法

目录 说明&#xff1a; 1. 参数模型&#xff08;全局字典&#xff09; 2. 实现过程&#xff08;C&#xff09; 创建功能包 参数命令行的使用 YAML参数文件 rosparam命令 使用示例 编程方法&#xff08;C&#xff09; 配置代码编译规则 编译并运行 编译 运行 3. 实…...

Webpack 懒加载

文章目录 前言懒加载示例后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;webpack &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现错误&#xff0c;感谢大家指出…...

深度遍历DFS(括号生成,二叉树所有路径)

正整数 n 代表生成括号的对数&#xff0c;请设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;["((()))","(()())","(())()","()(())","()()(…...

Rational Arithmetic

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️有理数运算 实现对两个有理数的…...

文心一言4.0(ERNIE-Bot-4)申请方法及简单调用代码示例

10月17日过后&#xff0c;估计很多人会看到类似的新闻&#xff0c;如图&#xff1a; 我看到这则新闻也是觉得非常感兴趣&#xff0c;于是本着“百闻不如一见”的实事求是的态度检索如何申请&#xff0c;没想到还真找到了ERNIE-Bot-4&#xff08;俗称&#xff1a;文心一言4.0&a…...

年终好价节买什么好?这些数码好物闭眼入

大家是不是都没听说过好价节&#xff1f;直截了当地说&#xff0c;这其实就是原先的双十二购物狂欢节&#xff0c;只不过给它起了个新名字。不过&#xff0c;今年毕竟是首次改名&#xff0c;因此淘宝年终好价节的各种优惠&#xff0c;仍然是我们值得期待的&#xff01;作为年前…...

webpack对项目进行优化

对项目进行优化是提高性能和效率的关键&#xff0c;以下是一些实用的Webpack优化技巧&#xff1a; 代码拆分&#xff08;Code Splitting&#xff09;&#xff1a;将代码拆分为多个小块&#xff0c;按需加载。通过配置splitChunks插件&#xff0c;可以将公共代码提取到单独的文件…...

Python edge-tts库全部声音模型一览表

下面是edge-tts的声音模型&#xff0c;zh-CN为中文语音模型 Name: af-ZA-AdriNeural Gender: Female Name: af-ZA-WillemNeural Gender: Male Name: am-ET-AmehaNeural Gender: Male Name: am-ET-MekdesNeural Gender: Female Name: ar-AE-FatimaNeural Gender: Female N…...

网络编程相关面试题

目录 1.请解释一下什么是TCP协议的三次握手&#xff1f;2.TCP协议使用什么机制确保数据包的顺序和完整性&#xff1f;3.什么是UDP协议&#xff1f;它与TCP协议有什么不同&#xff1f;4.请解释一下什么是IP地址&#xff1f;为什么需要它&#xff1f;5.请解释一下什么是端口&…...

TCP_NODELAY与TCP通信效率

最近做tcp通信速度测试&#xff1a;主要流程如下所示&#xff1a; //client: while() { send data... recv data... //阻塞 }//server: while() { recv data... send data... } 当每次send数据量较小时&#xff0c;速度极慢&#xff01;而send数据量较大时速度尚可。两者速度…...

ZooKeeper的分布式锁---客户端命令行测试(实操课程)

本系列是zookeeper相关的实操课程&#xff0c;课程测试环环相扣&#xff0c;请按照顺序阅读测试来学习zookeeper。阅读本文之前&#xff0c;请先阅读----​​​​​​zookeeper 单机伪集群搭建简单记录&#xff08;实操课程系列&#xff09;。 阅读本文之前&#xff0c;请先阅读…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...