使用python读取大文件

来源:互联网 发布:sql语句美化小工具 编辑:程序博客网 时间:2024/05/18 00:56
Python中读取数据的时候有几种方法,无非是read,readline,readlings和xreadlines几种方法,在几种方法中,read和xreadlines可以作为迭代器使用,从而在读取大数据的时候比较有效果.

在测试中,先创建一个大文件,大概1GB左右,使用的程序如下:

[python] view plain copy 在CODE上查看代码片派生到我的代码片
  1. import os.path  
  2. import time  
  3. while os.path.getsize('messages') <1000000000:  
  4.     f = open('messages','a')  
  5.     f.write('this is a file/n')  
  6.     f.close()  
  7.   
  8. print 'file create complted'  

在这里使用循环判断文件的大小,如果大小在1GB左右,那么结束创建文件。--需要花费好几分钟的时间。


测试代码如下:

[python] view plain copy 在CODE上查看代码片派生到我的代码片
  1. #22s  
  2. start_time = time.time()  
  3. f = open('messages','r')  
  4. for i in f:  
  5.     end_time = time.time()  
  6.     print end_time - start_time  
  7.     break  
  8. f.close()  
  9.   
  10. #22s  
  11. start_time = time.time()  
  12. f = open('messages','r')  
  13. for i in f.xreadlines():  
  14.     end_time = time.time()  
  15.     print end_time - start_time  
  16.     break  
  17. f.close()  
  18.   
  19.   
  20. start_time = time.time()  
  21. f = open('messages','r')  
  22. k= f.readlines()  
  23. f.close()  
  24. end_time = time.time()  
  25. print end_time - start_time  

使用迭代器的时候,两者的时间是差不多的,内存消耗也不是很多,使用的时间大概在22秒作用

在使用完全读取文件的时候,使用的时间在40s,并且内存消耗相当严重,大概使用了1G的内存。。


其实,在使用跌倒器的时候,如果进行连续操作,进行print或者其他的操作,内存消耗还是不可避免的,但是内存在那个时候是可以释放的,从而使用迭代器可以节省内存,主要是可以释放。

而在使用直接读取所有数据的时候,数据会保留在内存中,是无法释放这个内存的,从而内存卡死也是有可能的。


在使用的时候,最好是直接使用for i in f的方式来使用,在读取的时候,f本身就是一个迭代器,其实也就是f.read方法

0 0