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

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# 输出lineprint(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()

 

http://www.lryc.cn/news/272371.html

相关文章:

  • Vue 生命周期有哪些?作用是什么?
  • 《Vue3 前端构建工具》 Vue-cli 与 Vite 创建项目的插件和配置对比
  • springboot(ssm中山社区医疗综合服务平台 医疗管理系统 Java系统
  • Qt编写的exe程序上添加程序信息
  • (一)CarPlay集成开发之概述与环境篇
  • js文件上传 分片上传/断点续传/极速秒传
  • mysql 通过 binglog 恢复数据
  • 【REST2SQL】01RDB关系型数据库REST初设计
  • 图像识别原理
  • 共识算法介绍
  • Gen-AI 的知识图和分析(无需图数据库)
  • flutter 安卓使用高德插件黑屏
  • Java:表单生成excel文档 poi 通用
  • 使用Apache Commons SCXML实现状态机管理
  • 大数据技术原理与应用期末考试题
  • 解决jenkins的Exec command命令不生效,或者执行停不下来的问题
  • 【PHP】json_decode的第二个参数是什么意思
  • 学生公寓安全用电管理系统应用案例
  • python实现简易的flask后端接口
  • CSDN质量分批量查询
  • 【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC)
  • c语言结构体学习上篇
  • Linux: eBPF: bcc-tools:tcpdrop使用需要注意的问题
  • AI:113-基于卷积神经网络的图像风格迁移
  • 15、Kubernetes核心技术 - 探针
  • GTK4 环境配置
  • Yolov8部署——segmentation部署以及批量推理
  • 再见2023,你好2024!
  • 【计算机毕业设计】SSM二手交易网站
  • 纠删码ReedSolomon