当前位置: 首页 > 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;请先阅读…...

从ORB到SIFT:视觉SLAM中特征点算法实战对比(附OpenCV代码示例)

从ORB到SIFT&#xff1a;视觉SLAM中特征点算法实战对比与工程选型指南 1. 视觉SLAM中的特征点算法核心价值 在机器人自主导航和增强现实领域&#xff0c;视觉SLAM系统的前端处理如同人类视觉皮层&#xff0c;而特征点算法则是这个系统的视网膜神经节细胞。这些算法不仅决定了系…...

芯片行业的高门槛本质上是一次性固定成本极高导致的

AI 工具这波热潮里&#xff0c;芯片圈有个声音&#xff1a;以后一个人能不能做一颗芯片&#xff1f;很多人讨论的时候跑偏了&#xff0c;一直在聊人效、聊 AI 能替代多少工程师。真正的瓶颈根本不在这里。做过项目的人都知道&#xff0c;一个芯片项目的成本结构大概长这样&…...

Windows Defender一键移除工具:终极完整指南,三步彻底关闭系统安全防护

Windows Defender一键移除工具&#xff1a;终极完整指南&#xff0c;三步彻底关闭系统安全防护 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https:/…...

NodeList 对象

NodeList 对象 概述 NodeList 对象是 DOM(文档对象模型)中的一种数据结构,它代表了包含在一个父节点内的所有元素节点的一个集合。NodeList 对象常用于处理文档中的多个元素,是 JavaScript 在操作 DOM 时的一个重要工具。 特点 1. 长度属性 NodeList 对象具有一个 len…...

全电发票普及,智蜂AI智能代账助力合规与高效

票据管理时代已至智蜂AI代账破局增效人工智能自动化智蜂财税专注AI 人工智能代账服务&#xff0c;以智能系统高效处理票据、记账、报税&#xff0c;搭配专业会计师人工审核把关&#xff0c;为中小微企业提供安全、高效、合规的一站式财税解决方案&#xff0c;助力企业降本增效…...

OpenClaw 从翻车到迎来上百项更新:MiniMax、腾讯、阿里、有道 8 位专家拆解OpenClaw本土化实战解法

责编 | 梦依丹出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;3 月 24 日&#xff0c;行业顶流 OpenClaw 在迎来号称自诞生以来的最大更新之后&#xff0c;却始料未及地上演了一段“装虾五分钟&#xff0c;修 Bug 两小时”的升级翻车大事故。由于强行将插件生态迁移…...

用 AI 做鸿蒙游戏 NPC,是一种什么体验?

子玥酱 &#xff08;掘金 / 知乎 / CSDN / 简书 同名&#xff09; 大家好&#xff0c;我是 子玥酱&#xff0c;一名长期深耕在一线的前端程序媛 &#x1f469;‍&#x1f4bb;。曾就职于多家知名互联网大厂&#xff0c;目前在某国企负责前端软件研发相关工作&#xff0c;主要聚…...

kmp算法(完结)

1.重复的子字符串 class Solution { public:void getNext(vector<int> &next,const string s){int j0;next[j]0;for(int i1;i<s.size();i){while(j-1>0&&s[i]!s[j]){jnext[j-1];}if(s[i]s[j]){j;next[i]j;}else{next[i]0;}}}bool repeatedSubstringPa…...

7个技巧构建Telegraf高可用监控系统:从单点到企业级架构

7个技巧构建Telegraf高可用监控系统&#xff1a;从单点到企业级架构 你是否遇到过监控数据丢失、告警延迟或Agent单点故障&#xff1f;作为插件驱动的服务器代理&#xff08;Plugin-driven server agent&#xff09;&#xff0c;Telegraf在企业级监控中扮演关键角色&#xff0…...

小型团队协作:OpenClaw+Qwen3-14B搭建内部问答知识库

小型团队协作&#xff1a;OpenClawQwen3-14B搭建内部问答知识库 1. 为什么我们需要本地化问答知识库 去年我们团队遇到一个典型问题&#xff1a;每当新人加入时&#xff0c;总要花费大量时间在数百份技术文档和客户案例中寻找特定问题的解答。更麻烦的是&#xff0c;有些涉及…...