博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python读取大文件
阅读量:6564 次
发布时间:2019-06-24

本文共 987 字,大约阅读时间需要 3 分钟。

最近在学习python的过程中接触到了python对文件的读取。python读取文件一般情况是利用open()函数以及read()函数来完成:

f = open(filename,'r')f.read()

这种方法读取小文件,即读取远远大小小于内存的文件显然没有什么问题。但是如果是将一个10G大小的日志文件读取,即文件大于内存的大小,这么处理就有问题了,会造成MemoryError ... 也就是发生内存溢出。

发生这种错误的原因在于,read()方法执行操作是一次性的都读入内存中,显然文件大于内存就会报错。

解决方法:

这里发现跟read()类似的还有其他的方法:read(参数)、readline()、readlines()

(1)read(参数):通过参数指定每次读取的大小长度,这样就避免了因为文件太大读取出问题。

while True:    block = f.read(1024)    if not block:        break

 (2)readline():每次读取一行

while True:    line = f.readline()    if not line:        break

 

(3)readlines():读取全部的行,构成一个list,通过list来对文件进行处理,但是这种方式依然会造成MemoyError

for line in f.readlines():    ....

 

以上基本分析了python中读取文件的方法,但是总感觉不能达到python中所强调的优雅,后来发现了还有下面的解决方法:

pythonic(我理解的是很python的python代码)的解决办法:

with open(filename, 'r') as flie:    for line in file:        ....

 

对可迭代对象file进行迭代,这样会自动的使用buffered IO以及内存管理,这样就不必担心大文件问题了。

后来,又发现了一个模块:linecache,这个模块也可以解决大文件读取的问题,并且可以指定读取哪一行,

# 输出第2行text = linecache.getline(filename, 2)

 

转载于:https://www.cnblogs.com/wulaa/p/7852592.html

你可能感兴趣的文章
JAVA必备——13个核心规范
查看>>
第37周五
查看>>
hdu-----(4514)湫湫系列故事——设计风景线(树形DP+并查集)
查看>>
android常见错误-Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
查看>>
第40周二
查看>>
用户注册
查看>>
使用虚拟机运行Ubuntu时,主机与宿主机共享文件的方法。
查看>>
做一个略调皮的个人主页--相册与随笔篇
查看>>
EJB究竟是什么,真的那么神奇吗??
查看>>
HBase性能调优
查看>>
Python 转义符
查看>>
zsh与oh-my-zsh
查看>>
Qt计算器开发(二):信号槽实现数学表达式合法性检查
查看>>
海茶3 らぶデス3 入门经典教程
查看>>
pstree命令
查看>>
css选择器顺序的小技巧
查看>>
C#之自己定义的implicit和explicit转换
查看>>
dojo 学习笔记之dojo.query - query(id) 与query(class)的差别
查看>>
Java基础加强总结(三)——代理(Proxy)
查看>>
一步一步写算法(之hash表)
查看>>