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

81. read readline readlines 读取文件的三种方法

81. read readline readlines 读取文件的三种方法

文章目录

  • 81. read readline readlines 读取文件的三种方法
    • 1. 读取文件的三种方法
    • 2. read方法
    • 3. readline方法
    • 4. readlines方法
    • 5. 代码总结
      • 5.1 read方法读取全部内容
      • 5.2 readline方法读取一行,返回字符串
      • 5.3 readlines方法读取一行,返回列表

1. 读取文件的三种方法

read[riːd]:读取。

line [laɪn]:线、行。

在这里插入图片描述

【备注】

上述图片来自【大熊课堂】,本文内容参考【大熊课堂】的读取文件的三种操作方法

2. read方法

【功能】

读取文件的全部内容。

【返回值】

返回的数据类型为字符串。

【准备工作】

  1. 新建一个名为81的文件夹。

  2. 81文件夹中新建一个八字文案.txt文件。

在81.txt文件中写入如下内容:

马行千里
不洗沙尘
十年饮冰
难凉热血

  1. 81文件夹中新建一个81.py文件。

  2. 用VScode编辑器打开81.py文件,在该文件中编写代码。

【文件相关知识回顾】

文件的操作通常分为3个步骤:

  1. 打开文件

  2. 操作文件

  3. 关闭文件

重点注意用Python操作文件后注意要记得关闭文件夹。

【体验代码:读取文本的全部内容】

# open函数打开文件
f = open("八字文案.txt","r", encoding='utf-8')# read方法读取文件
c = f.read()
print(c)# close函数关闭文件
f.close()

【终端输出】

马行千里
不洗沙尘
十年饮冰
难凉热血  

运行上面的代码,我们读取了八字文案.txt文件中的内容。

【open函数语法回顾】

open(file, mode='r', encoding='None', errors='None')
  1. 参数file表示要打开文件的路径

  2. 参数 encoding 表示文件的编码方式,文件编码方式一般为 ‘utf-8’。

  3. errors 参数表示读写文件时碰到错误的报错级别。

  4. 参数mode决定了打开文件的模式。

这里的r表示以只读模式打开文件。

【mode参数说明】

在这里插入图片描述

  1. 运行open函数返回的是一个文件对象

  2. open 语句需要使用close关闭文件。

  3. with open 语句不需要使用close关闭文件。

【上面的代码可以优化如下】

# with open 语句打开文件
with open("八字文案.txt","r", encoding='utf-8') as f:# 读取文件print(f.read())

【终端输出】

马行千里
不洗沙尘
十年饮冰
难凉热血  

【相关知识可参考以下链接】

69. open函数—打开文件并返回文件对象

70. with open( ) as 以自动关闭文件的方式打开文件

【体验代码:read读取部分内容】

当read方法的括号为空时,我们输出了txt文件的全部内容。

下面我们给read方法的括号中添加一个数值。

【read(1)】

with open("八字文案.txt","r", encoding='utf-8') as f:# 读取文件print(f.read(1))

【终端输出】

当添加数值1时,程序读取了txt文档的中的第一字符。

运行结果输出了第一个字符

【read(4)】

with open("八字文案.txt","r", encoding='utf-8') as f:# 读取文件print(f.read(4))

【终端输出】

马行千里

当添加数值4时,程序读取了txt文档的中的前4个字符。

运行结果输出了文档的前4个字符马行千里

【read(5)】

with open("八字文案.txt","r", encoding='utf-8') as f:# 读取文件print(f.read(5))

【终端输出】

马行千里

当添加数值5时,程序读取了txt文档的中的前5个字符。

但运行结果还是输出了文档的前4个字符马行千里

输入4和输入5的终端输出结果肉眼看是一样的,但其本质是不一样的。

在这里插入图片描述

输入4的时候,终端输出只有文本内容。

输入5的时候,终端输出除了文本内容,还有一个换行效果。

这是因为我在编写八字文案.txt文档时,在马行千里后面敲了一个回车。

由了回车我们肉眼看到的是换行效果。

而程序把这个换行效果识别成换行符\n

这个\n也是一个字符。

因此当程序运行到该字符时,才会输出一个换行效果。

【read(12)】

with open("八字文案.txt","r", encoding='utf-8') as f:# 读取文件print(f.read(12))

【终端输出】

马行千里
不洗沙尘
十年

3. readline方法

line[laɪn]:线,行。

line是行的意思。

【功能】

读取一行。

【返回值】

返回的数据类型是字符串。

【体验代码】

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')# 读取文件
c = f.readline()
print(c)  # 关闭文件
f.close()

【终端输出】

马行千里

运行上面的代码,程序输出了文档中第一行的内容。

【输出多行】

如果我们需要输出多行,就多次添加readline语句即可。

【输出2行】

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')
# 读取文件
c = f.readline()
print(c)  
c = f.readline()
print(c)  
# 关闭文件
f.close()

【终端输出】

马行千里不洗沙尘

【输出7行】

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')
# 读取文件
c = f.readline()
print(c)  
c = f.readline()
print(c)  
c = f.readline()
print(c) 
c = f.readline()
print(c) 
c = f.readline()
print(c) 
c = f.readline()
print(c) 
c = f.readline()
print(c) 
# 关闭文件
f.close()

【终端输出】

马行千里不洗沙尘十年饮冰难凉热血  

文档内容只有4行,当我写了7个readline语句后,后3个语句因此没有输出内容,程序会识别输出空行。

当我们在读取一个文件的时候,如果文件内容很多,这样一行一行的输出较为麻烦。

我们可以使用while循环来依次读取每行内容。

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')# 读取文件
c = f.readline()
while c !="":print(c)c = f.readline()
# 关闭文件
f.close()

【终端输出】

马行千里不洗沙尘十年饮冰难凉热血  

【代码解析】

while c !="":print(c)c = f.readline()
while c !=""

c是读取到的每行文件内容。

内容的类型为字符串。

当变量c的值不等于0的时候,输出c变量,即输出该行的字符串内容。

print(c)
c = f.readline()

然后继续读取下一行内容。

当变量c的值等于0的时候,while循环终止,程序继续往下走。

【消除换行符】

观察输出结果,发现每行输出后都有一行空行,很不美观。

这个换行是print函数的end参数控制的。

完整的代码应该是下面这样:

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')
# 读取文件
c = f.readline()
while c !="":print(c,end="\n")c = f.readline()
# 关闭文件
f.close()
end="\n"

print函数是有很多个参数的,且它的end参数默认值为end="\n"

因此,当我们不介意有换行的时候,通常不会修改这个参数,也不会写出这个参数,都是使用默认值。

那如果我们不需要欢喜,我们只需修改end参数的值即可。

这里我把end参数的值修改成一个空字符,输出的结果就没有换行效果了。

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')
# 读取文件
c = f.readline()
while c !="":print(c,end="")c = f.readline()
# 关闭文件
f.close()

【终端输出】

马行千里
不洗沙尘
十年饮冰
难凉热血  

【空字符效果】

end=""

【总结】

如果你想要换行效果,不用设置print函数的end参数。

如果你不想要换行效果,将print函数的end参数修改为end=""即可。

4. readlines方法

【功能】

读取一行。

【返回值】

返回的是一个字符串的列表。

【体验代码】

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')
# 读取文件
c = f.readlines()
print(c)
print(type(c))
# 关闭文件
f.close()

【终端输出】

['马行千里\n', '不洗沙尘\n', '十年饮冰\n', '难凉热血  ']
<class 'list'>

【readline和readlines的异同】

相同点每次都读取一行。

区别就是一个返回的是字符串类型,一个返回的是列表类型。

readlines会把读取到的每一行都当做一个列表的元素,添加到列表中。

【for循环提取列表中的元素】

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')
# 读取文件
c = f.readlines()
for i in c:print(i,end="")  # end=""消除换行效果
# 关闭文件
f.close()

【终端输出】

马行千里
不洗沙尘
十年饮冰
难凉热血  

5. 代码总结

5.1 read方法读取全部内容

【open语句】

# open函数打开文件
f = open("八字文案.txt","r", encoding='utf-8')# read方法读取文件
c = f.read()
print(c)# close函数关闭文件
f.close()

【终端输出】

马行千里
不洗沙尘
十年饮冰
难凉热血  

【with open语句】

# with open 语句打开文件
with open("八字文案.txt","r", encoding='utf-8') as f:# 读取文件print(f.read())

【终端输出】

马行千里
不洗沙尘
十年饮冰
难凉热血  

5.2 readline方法读取一行,返回字符串

【读取一行】

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')
# 读取文件
c = f.readline()
print(c) 
# 关闭文件
f.close()

【终端输出】

马行千里

【while循环读取全部内容】

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')# 读取文件
c = f.readline()
while c !="":print(c,end="")c = f.readline()
# 关闭文件
f.close()

【终端输出】

马行千里
不洗沙尘
十年饮冰
难凉热血  

5.3 readlines方法读取一行,返回列表

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')
# 读取文件
c = f.readlines()
print(c)
print(type(c))
# 关闭文件
f.close()

【终端输出】

['马行千里\n', '不洗沙尘\n', '十年饮冰\n', '难凉热血  ']
<class 'list'>

【for循环提取列表中的元素】

# 打开文件
f = open("八字文案.txt","r", encoding='utf-8')
# 读取文件
c = f.readlines()
for i in c:print(i,end="")  # end=""消除换行效果
# 关闭文件
f.close()

【终端输出】

马行千里
不洗沙尘
十年饮冰
难凉热血 
http://www.lryc.cn/news/64527.html

相关文章:

  • 【社区图书馆】【图书活动第四期】
  • webpack学习指南(上)
  • 刷题记录˃ʍ˂
  • Word2vec原理+实战学习笔记(二)
  • 什么是Java的多线程?
  • “use strict“是什么? 使用它有什么优缺点?
  • 【C++】C++11常用特性总结
  • 泛型——List 优于数组
  • JavaScript中对象的定义、引用和复制
  • JavaScript通过函数异常处理来输入圆的半径,输出圆的面积的代码
  • Ubuntu 安装 Mysql
  • 【五一创作】【Midjourney】Midjourney 连续性人物创作 ② ( 获取大图和 Seed 随机种子 | 通过 seed 随机种子生成类似图像 )
  • 分布式事务 --- Seata事务模式、高可用
  • SQL(基础)
  • 「OceanBase 4.1 体验」OceanBase 4.1社区版的部署及使用体验
  • 计算机操作系统实验:银行家算法模拟
  • 机器学习:多项式拟合分析中国温度变化与温室气体排放量的时序数据
  • 一个 24 通道 100Msps 逻辑分析仪
  • 使用Process Explorer和Dependency Walker排查C++程序中dll库动态加载失败问题
  • 网工Python:如何使用Netmiko的SCP函数进行文件传输?
  • 题目 3166: 蓝桥杯2023年第十四届省赛真题-阶乘的和--不能完全通过,最好情况通过67.
  • ChatGPT- OpenAI 的 模型(Model) 介绍
  • X 态及基于 VCS 的 X-Propagation 检测
  • 数据库之事务隔离级别详解
  • 守护进程、僵尸进程、孤儿进程
  • 软件设计师笔记
  • 4_用dockerfile制作镜像
  • 肝一肝设计模式【四】-- 建造者模式
  • 从设计到产品
  • 《疯狂Python讲义》值传递的细节