linecache模块
通过用它可以方便地获取某一文件某一行的内
例如,你想获取input.txt中的第8行,你可以这样:
1.引入这个库
import linecache
2.调用getline()函数
line = linecache.getline('input.txt',8).strip()
linecache.getline () 第一参数是文件名,第二个参数是行编号。如果文件名不能直接找到的话,会从 sys.path 里找。如果请求的行数超过文件行数,函数不会报错,而是返回’‘空字符串。如果文件不存在,函数也不会报错,也返回’'空字符串。
学以致用,接下来就用这个模块写一个交换文件奇偶行的python代码:
# -*- coding: utf-8 -*-
import linecache
def ji_ou_change(file_b,file_a):
f_be=open(file_b,'r',encoding='utf-8')
f_af=open(file_a,'w',encoding='utf-8')
line_num=len(f_be.readlines())
for i in range(1 , line_num + 1):
if i % 2 == 0:
line = linecache.getline(file_b,i-1).strip()
print(line + '\n')
f_af.write(line + '\n')
elif i % 2 == 1:
line = linecache.getline(file_b,i+1).strip()
print(line + '\n')
f_af.write(line + '\n')
f_be.close()
f_af.close()
if __name__== "__main__":
ji_ou_change("before.txt","after.txt")
linecache 还会尝试用缓存一些信息来优化对文件的读取。它还提供了两个方法来处理缓存相关。
linecache.clearcache()
清空所有缓存,注意是所有。
linecache.checkcache(filename=None)
这个函数用于检查缓存,如果文件的大小或者修改时间有变化,会把文件原先的缓存删除,如果文件是懒加载的则保持不变。当filename为None时检查缓存中的所有文件。
以上是比较常用,当然还有其他的,大家可以自行百度~