Python读取文件某行数据

文本处理是脚本语言的强项,有很多文本处理都用perl写原因是感觉简洁,其实python做起来也是十分简单的,只不过自己不熟

从文件中读取指定的行,依赖linecache这个模块很容易做到

$ cat test.txt
1111111111111
222222222222
3333333333333333
4444444444
555555555555

>>> import linecache
>>> theline = linecache.getline(‘test.txt’, 3)
>>> print theline
3333333333333333

 

如果想要对一个文件的许多行进行多次读取处理的时候,linecache会很有用,从这个模块的命名就可以看出来。linecache会缓存一些信息以避免重复工作。当你不需要从缓存中获得行数据时,可以调用模块的clearcache函数来释放作为缓存的内存,假如磁盘上的文件发生了改变,还可以调用checkcache,并确保缓存中存储的是最新的信息

由于linecache读取并且缓存了你指定文件名中所有文本,所以,如果文件比较大,而只需要读取某一行,那么感觉有些得不偿失。如果考虑性能,正好这里是瓶颈,那么可以封装成一个函数,可以适当提升运行速度

#!/usr/bin/env python
def getline(thefile, line_number):
    if line_number < 1:
        return ”
    for current_line_number, line in enumerate(open(thefile, ‘rU’)):
        if current_line_number == line_number – 1:
            return line
    return ”

theline = getline(‘test.txt’, 3)
print theline

这里需要注意的是enumerate是从0开始计数的,而line_number是从1开始的,所以比较的时候必须是line_number – 1

发表评论