python中的readlines和xreadlines函数

陈舵主 发布于 2013/11/13 14:12
阅读 9K+
收藏 0

请教大家个问题,关于python中的readlines和xreadlines函数的

第一个问题:

a.txt:11\n22\n

f = open('a.txt', 'r')
    position = 0
    while True:
        lines = f.readlines(8)
        print '***** :', lines
        if f.tell() - position == 0:
            break
        position = f.tell()
        for line in lines:
            # print line
            pass
    f.close()
readlines的参数好像没有起到作用,那这个参数怎么用呢?

第二个问题:

readlines()和xreadlines()的区别

如果只是2个函数返回值有区别(一个返回list,一个返回生成器),剩下的无任何区别的话,那xreadlines岂不是很省内存吗?

这2个函数读的效率是一样的吗?

以下是问题补充:

@陈舵主:第一个问题知道了,它内部有个缓存大小,如果参数的大小小于缓存的大小,会按照缓存读取 (2013/11/13 14:55)
加载中
1
邱Sir
邱Sir

(1)请参阅Python文档说明,不再赘述。


(2)这个问题值得好好探讨一下:


file.readlines()是把文件的全部内容读到内存,并解析成一个list,当文件的体积很大的时候,需要占用很多内存,使用该方法是一种不明智的做法。


另一方面,从Python 2.3开始,Python中的文件类型开始支持迭代功能,比如下面两段代码做的其实差不多:

with open('foo.txt', 'r') as f:
    for line in f.readlines():
        # do_something(line)
with open('foo.txt', 'r') as f:
    for line in f:
        # do_something(line)


但是,后面一种迭代占用更小的内存,而且更加智能(依赖于Python文件对象的实现),所需文件内容是自动从buffer中按照需要读取的,是值得鼓励的做法。


至于file.xreadlines()则直接返回一个iter(file)迭代器,在Python 2.3之后已经不推荐这种表示方法了,推荐用上面的

for line in f:
    # do_something(line)
这种方式。


希望以上信息能够提供帮助。

陈舵主
陈舵主
谢谢!
返回顶部
顶部