python 读取文件的三种方式,linecache模块读取文件
read(),readline(),readlines()是python读取文件常用的三种方式,下面看看这三种方式读取文件的区别
首先准备一个TestRead.txt文档,内容如下:
1. 使用read()方法读取文件,f.read()会一次读取全部内容(一定要记得读取之后使用f.close()关闭文件,以便尽早的释放所占用的系统资源并尽早将文件置于更安全的状态)
with open(r"E:\Anaconda\Pythoncode\TestRead.txt","r",encoding='utf8') as f:
print(f.read())
f.close()
结果如图:
f.read(size)可以跟参数,例如f.read(10),会读取10个字节的内容。这里需要注意的是,换行符也会被算作一个字符
2. f.readline()每次会读取一行的内容
with open(r"E:\Anaconda\Pythoncode\TestRead.txt","r",encoding='utf8') as f:
print(f.readline())
f.close()
结果如图:
3. f.readlines(),会读取全部的内容,然后返回一个list,每行的内容就是list中的一个元素
with open(r"E:\Anaconda\Pythoncode\TestRead.txt","r",encoding='utf8') as f:
print(f.readlines())
f.close()
结果如图:
如果要使用f.readlines()逐行输出每行的内容,方法和list的遍历一致
with open(r"E:\Anaconda\Pythoncode\TestRead.txt","r",encoding='utf8') as f:
for i in f.readlines():
print(i,end="")
f.close()
结果:
4. linecache模块读取文件,该模块允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。
linecache.getline(filename,lineno):从名为filename的文件中得到第lineno行。这个函数从不会抛出一个异常–产生错误时它将返回”(换行符将包含在找到的行里)。
如果文件没有找到,这个函数将会在sys.path搜索
import linecache
f = linecache.getline("readTest.txt",5)#必须要有参数,参数为5,则输出第五行的数据
print(f)
linecache.clearcache()#清空缓存。 如果你不再需要之前使用 getline() 从文件读取的行即可使用此函数。
linecache.getlines()从名为filename的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素
import linecache
f = linecache.getlines("readTest.txt")
print(f)
linecache.clearcache()
结果:
也可以指定输出的范围,如输出前四行(其实相当于list的切片操作list[0:4]):
import linecache
f = linecache.getlines("readTest.txt")[0:4]
print(f)
linecache.clearcache()
linecache.checkcache(filename) 检查缓存的有效性。如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,使用这个函数。如果省略filename,将检查缓存里的所有条目。
linecache.updatecache(filename) 更新文件名为filename的缓存。如果filename文件更新了,使用这个函数可以更新linecache.getlines(filename)返回的列表
import linecache
f = linecache.getlines("readTest.txt")
print(f)
linecache.clearcache()
print(linecache.clearcache())#检查缓存的有效性。如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,使用这个函数。如果省略filename,将检查缓存里的所有条目。
print(linecache.updatecache("readTest.txt"))#更新文件名为filename的缓存。如果filename文件更新了,使用这个函数可以更新linecache.getlines(filename)返回的列表