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

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

《Docker》架构

文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器&#xff0c;docker&#xff0c;镜像&#xff0c;k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...