Python open函数详解:打开指定文件与 readline和readlines函数:按行读取文件

Python open函数详解:打开指定文件 

掌握了各种操作目录字符串或目录的函数之后,接下来可以准备读写文件了。在进行文件读写之前,首先要打开文件。

Python 提供了一个内置的 open() 函数,该函数用于打开指定文件。

open() 函数的语法格式如下:

open(file_name [, access_mode] [, buffering])

在上面的语法格式中,只有第一个参数是必需的,该参数代表要打开文件的路径。access_mode 和 bufering 参数都是可选的。

在打开文件之后,就可调用文件对象的属性和方法了。文件对象支持如下常见的属性:

file.closed:该属性返回文件是否己经关闭。

file.mode:该属性返回被打开文件的访问模式。

file.name:该属性返回文件的名称。

如下程序简单示范了如何打开文件和访问被打开文件的属性:

# 以默认方式打开文件
f = open('open_test.py')
# 访问文件的编码方式
print(f.encoding) # cp936
# 访问文件的访问模式
print(f.mode) # r
# 访问文件是否已经关闭
print(f.closed) # False
# 访问文件对象打开的文件名
print(f.name) # open_test.py

上面程序使用 open() 内置函数打开了 open_test.py 文件,接下来程序访问了被打开文件的各属性。运行上面程序,可以看到如下输出结果:

cp936
r
False
open_test.py

从上面的输出结果可以看出,open() 函数默认打开文件的模式是“r”,也就是只读模式。下面详细讲解 open() 函数支持的不同模式。

文件打开模式

open() 函数支持的文件打开模式如下图所示

模式意义
r只读模式
w写模式
a追加模式
+读写模式,可与其他模式结合使用。比如 r+ 代表读写模式,w+ 也代表读写模式
b二进制模式,可与其他模式结合使用。比如 rb 代表二进制只读模式,rb+ 代表二进制读写模式,ab 代表二进制追加模式

可能有读者感到疑惑,w 本身就代表写模式,w+ 还有什么意义呢?

简单来说,w 只是代表写模式,而 w+ 则代表读写模式,但实际上它们的差别并不大。因为不管是 w 还是 w+ 模式,当使用这两种模式打开指定文件时,open() 函数都会立即清空文件内容,实际上都无法读取文件内容。

根据上面的介绍不难看出,如果希望调用 open() 函数打开指定文件后,该文件中的内容能被保留下来,那么程序就不能使用 w 或 w+ 模式。

 

 Python readline和readlines函数:按行读取文件

如果程序要读取行,通常只能用文本方式来读取,道理很简单,只有文本文件才有行的概念,二进制文件没有所谓行的概念。

文件对象提供了如下两个方法来读取行:

readline([n]):读取一行内容。如果指定了参数 n,则只读取此行内的 n 个字符。

readlines():读取文件内所有行。

下面程序示范了使用 readline() 方法来读取文件内容:

import codecs
# 指定使用utf-8字符集读取文件内容
f = codecs.open("readline_test.py", 'r', 'utf-8', buffering=True)
while True:
    # 每次读取一行
    line = f.readline()
    # 如果没有读到数据,跳出循环
    if not line: break
    # 输出line
    print(line, end='')
f.close()

上面程序使用 UTF-8 字符集打开 readline_test.py 文件,这是由于该 Python 源文件是采用 UTF-8 字符集保存的,因此,如果直接用普通的 open() 函数打开文件,则会引发 UnicodeDecodeError 异常。

接下来程序使用 readline() 方法逐行进行读取,当读取到结尾时,该方法将会返回空,程序就会退出循环。

程序也可以使用 readlines() 方法一次读取文件内所有行。例如如下程序:

import codecs
# 指定使用utf-8字符集读取文件内容
f = codecs.open("readlines_test.py", 'r', 'utf-8', buffering=True)
# 使用readlines()读取所有行,返回所有行组成的列表
for 1 in f.readlines():
    print(1, end='')
f.close()

 

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

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

相关文章

团子杂记:SAP PS or 项目管理软件(PMIS )? PPM/P6

众所周知SAP的PS模块在项目型企业的SAP应用中扮演着核心角色,整个项目端到端的业务执行、财务核算、控制及分析都是通过PS作为主线,依赖于PS中的项目对象(如WBS元素、网络活动等)实现的。 在实施SAP的过程中,可以看到…

实战环境搭建-安装Linux

打开VMware如下图: 点击“创建新的虚拟机”如下图: 选择自定义(高级选项),点击“下一步”,如下图: 点击“下一步” 点击“浏览”选择下载好的镜像文件,如下图:

arduino ESP32 002 wokwi在线仿真点亮小灯

wokwi 点亮小灯 ESP-IDF #include <stdio.h> #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h"#define PIN_LED_1 GPIO_NUM_16void setup() {// 设置LED引脚为输出gpio_reset_pin(PIN_LED_1);// esp…

在mac上怎么方便的编辑xml文件

在Mac上 XML 文件不能默认以较直观的方式在“文本编辑”中打开&#xff0c;如果已安装 Xcode&#xff0c;你可以使用 Xcode 打开 XML 文件。在 Xcode 中&#xff0c;XML 文件通常会以可视化的方式显示&#xff0c;使得编辑更加直观&#xff0c;但是如果你不想安装 XCode&#x…

项目引入Jar包的几种方式

目录 背景 方式一 前提 创建一个jar包 使用 方式二 背景 通常情况下&#xff0c;使用SpringBoot框架开发项目的过程中&#xff0c;需要引入一系列依赖&#xff0c;首选的就是在项目的 pom.xml 文件里面通过Maven坐标进行引入&#xff08;可以通过Maven的坐标引入jar包的前…

[C#]C# OpenVINO部署yolov8实例分割模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 抛弃了前几代模型的 Anchor-Base。 YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来&#xff0c;领域内的研究者们…

HarmonyOS-ArkTS基本语法及声明式UI描述

初识ArkTS语言 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集。因此&#xff0c;在学习ArkTS语言之前&#xff0c;建议开发者具备TS语…

基于springboot的火锅店管理系统设计与实现

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;一 、设计说明 1.1选题动因 当前…

LeetCode 2807. 在链表中插入最大公约数

给你一个链表的头 head &#xff0c;每个结点包含一个整数值。 在相邻结点之间&#xff0c;请你插入一个新的结点&#xff0c;结点值为这两个相邻结点值的 最大公约数 。 请你返回插入之后的链表。 两个数的 最大公约数 是可以被两个数字整除的最大正整数。 示例 1&#xf…

每周一算法:倍增法查找位置

倍增法 倍增法&#xff08;Binary Lifting&#xff09;&#xff0c;顾名思义&#xff0c;就是利用“以翻倍的速度增长”的思想来解决问题的一类算法。 下面介绍如何使用倍增法在有序的序列中查找满足条件的位置。 题目描述 给定一个单调不降的序列&#xff0c;以及 m m m个…

三、C语言中的分支与循环—for循环 (6)

本章分支结构的学习内容如下&#xff1a; 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句&#xff08;4&#xff09;分支结构 完 本章循环结构的…

缓存和数据库,1+1如何大于2?

一、缓存的本质 缓存&#xff0c;简单说就是为了节约对原始资源重复获取的开销&#xff0c;而将结果数据副本存放起来以供获取的方式。 首先&#xff0c;缓存往往针对的是“资源”。我们前面已经多次提到过&#xff0c;当某一个操作是"幂等"的和“安全"的&#…

从传统到现代:知识服务如何被数字化工具重新定义

随着数字技术的快速发展&#xff0c;教育行业正在经历一场前所未有的变革。乔拓云作为知识产品与用户服务的数字化工具&#xff0c;以其卓越的技术实力和创新能力&#xff0c;引领着这场变革。 乔拓云开发的教育系统&#xff0c;为广大知识分享博主提供了一个全新的舞台。这个系…

【springboot实现CURD模版项目-Jesus】

springboot实现CURD模版项目-Jesus STEP 1 项目创建 1.1 新建Spring Initializr项目   1.2 选择需要的依赖 springboot有2.7.2直接选272STEP 2 配置更改 2.1更改maven配置   2.2 检查项目配置jdk、sdk、jre版本一致   2.3 检查pom文件&#xff0c;Maven-Reload project构…

数据库02-06 形式化

01. 03. 04. 05. 06. 07. 08. 09.

【Linux Shell】2. Shell 变量

文章目录 【 1. 变量命名规则 】【 2. 变量的使用 】【 3. 只读变量 】【 4. 删除变量 】【 5. 变量类型 】【 6. Shell 字符串 】6.1 字符串的分类6.2 字符串操作 【 7. Shell 数组 】7.1 定义数组7.2 读取数组7.3 获取数组的长度 【 8. Shell 注释 】8.1 单行注释8.2 多行注释…

『开发工具篇』- 配置 gradle 等相关依赖镜像源

『开发工具篇』- 配置 gradle 等相关依赖镜像源 1.更换gradle下载源2. 配置setting.gradlekts文件gradle文件 1.更换gradle下载源 使用腾讯云的镜像库https://mirrors.cloud.tencent.com/gradle/ gradle-x.x-all.zip&#xff1a;编译后的二进制发布版以及源码和文档gradle-x.…

C++面向对象语法总结(二)

目录 《C面向对象语法总结(一&#xff09;》 十一、继承 继承&#xff0c;可以让子类拥有父类的多有成员&#xff08;变量、函数&#xff09;如下面的代码&#xff1a;Student是子类&#xff08;subclass,派生类&#xff09;&#xff0c;Person是父类&#xff08;superclass…

感恩客户·持续向上-契约锁电子签章

2023年&#xff0c;电子签章成为组织数字化建设中的刚性需求&#xff0c;市场机遇帮助契约锁实现了产品、伙伴、客户、应用场景等全方位的持续发展。 感恩客户和伙伴的支持&#xff0c;让契约锁在2023年不断成长和进步。 感恩客户相伴成长 2023年&#xff0c;契约锁为“政府机关…

【2024.01.03】转行小白-刷css面试题01

总结 1.margin 负值问题 margin-top 和 margin-left 负值&#xff0c;元素向上、向左移动&#xff0c;自己动margin-right 负值&#xff0c;右侧元素左移&#xff0c;自身不受影响&#xff0c;别人动margin-bottom 负值&#xff0c;下方元素上移&#xff0c;自身不受影响 &am…