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行内容']