Python文件操作——只读操作(rt、rb)

这篇博客介绍了Python中打开文件的open函数,重点关注只读模式'r',包括读取所有内容、逐行读取、读取特定行数的方法。讲解了rt模式用于文本文件,rb模式适用于二进制文件,并强调了编码的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

open(文件路径, mode=‘r’, encoding=‘UTF-8’)

注意:文件路径,分别为相对路径绝对路径(或网络链接),相对路径指相对于当前程序所在的文件夹,绝对路径指磁盘的完整路径(windows含磁盘的盘符;linux含根目录斜杠(/))。

r模式操作文件,文本文件不存在时,不会自动创建,需要先创建文本文件(r.txt),文件目录如下:

读.py
测试文件/r.txt

注意:创建的文本文件,要以UTF-8编码形式写以下内容哦,要不然遇到编码问题而报错!
以下是"r.txt"的内容:

第1行内容
第2行内容
第3行内容
第4行内容
第5行内容
第6行内容
第7行内容
第8行内容
第9行内容
第10行内容

一、读取所有内容或n个字符:s = f.read(n),指定n值则读取n个字符

1、mode='rt’模式,读取文本文件内容:

with open('测试文件/r.txt', encoding='utf-8') as f:
    """
        mode=r,可省略,python已经默认只读'r'模式。
    """
    print(f.readable())  # True
    print(f.writable())  # False


with open('测试文件/r.txt', mode='rt', encoding='UTF-8') as f:
	# s = f.read(3) # 第1行
	s = f.read()
	print(s)
	print(type(s))  # <class 'str'>
    print(f.readable())   # True,判断是否可读
    print(f.writable())   # False,判断是否可写
"""输出:
第1行内容
第2行内容
第3行内容
第4行内容
第5行内容
第6行内容
第7行内容
第8行内容
第9行内容
第10行内容
"""

2、mode='rb’模式,读取所有文件内容(例如,常用的图片、音频、视频等文件)
b模式下,一定不能指定encoding(编码)参数。

with open('测试文件/r.txt', mode='rb') as f:
    """
        mode=rb:读写都是以bytes为单位的,适用于所有文件,一定不能指定encoding参数
    """
    content = f.read()
    print(content)
    print(type(content))  # <class 'bytes'>
    print(f.readable())   # True,判断文件是否可读
    print(f.writable())   # False,判断文件是否可写

二、读取所有内容:for遍历

注意:file文件为可迭代对象,可以使用for循环读取内容,而且需要使用strip()去掉回车行。

with open('测试文件/r.txt',mode='r',encoding='UTF-8') as f:
	for line in f:
    	print(line.strip())
	"""
	再执行一遍for循环,读不到内容的(光标停在文本文件的末尾),想要再读一遍,需要在for循环前,加上:f.seek(0)
	"""
	# f.seek(0) # 指针复位,指向文件头
	for line in f:
    	print(line.strip())
"""没有加上:f.seek(0),运行结果
第1行内容
第2行内容
第3行内容
第4行内容
第5行内容
第6行内容
第7行内容
第8行内容
第9行内容
第10行内容
"""
"""加上:f.seek(0),运行结果
第1行内容
第2行内容
第3行内容
第4行内容
第5行内容
第6行内容
第7行内容
第8行内容
第9行内容
第10行内容
第1行内容
第2行内容
第3行内容
第4行内容
第5行内容
第6行内容
第7行内容
第8行内容
第9行内容
第10行内容
"""

三、读取一行内容:f.readline().strip()

1.while循环:需要手动结束while循环
with open('测试文件/r.txt', mode='r', encoding='UTF-8') as f:
	"""循环读取文件中每行内容。注意:下面的代码未完成,没有跳出while循环,程序未结束。"""
	while 1:
    	s = f.readline().strip()
    	if s != '': # 读到的内容不为None,则执行print()
        	print(s)
		else:
			break
"""程序运行结果:
第1行内容
第2行内容
第3行内容
第4行内容
第5行内容
第6行内容
第7行内容
第8行内容
第9行内容
第10行内容
"""
2.for循环:(偶数)隔行打印
with open('测试文件/r.txt',mode='r',encoding='UTF-8') as f:
	for i in f:# 遍历file文件,会隔行读取
		# print(i.strip()) # 只需一行代码,就打印全部内容,但用不上readline()
    	s = f.readline().strip()
    	print(s)

"""
第2行内容
第4行内容
第6行内容
第8行内容
第10行内容
"""

for循环读取已知行数的内容
注意:这种写法,要事先知道r.txt文件中有多少行内容。

with open('测试文件/r.txt',mode='r',encoding='UTF-8') as f:
	line = 10 # 行数,需要知道文本文件共多少行
	for i in range(line):
    	s = f.readline().strip()
    	print(s)

"""输出line=10行内容:
第1行内容
第2行内容
第3行内容
第4行内容
第5行内容
第6行内容
第7行内容
第8行内容
第9行内容
第10行内容
"""

四、读取所有行内容:readlines() 返回一个列表(含换行转义符)

with open('测试文件/r.txt',mode='rt',encoding='utf-8') as f:
    lines = f.readline() # 读取一行内容
    print(lines)    # 第1行内容
                    #
    lines = f.readlines() # 含换行符
    print(lines) # ['第2行内容\n', '第3行内容\n', '第4行内容\n', '第5行内容']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值