Python如何处理大数据?3个技巧效率提高攻略

若是你有个五、6 G 大小的文件,想把文件内容读出来作一些处理而后存到另外的文件去,你会使用什么进行处理呢?不用在线等,给几个错误示范:有人用multiprocessing 处理,可是效率很是低。因而,有人用python处理大文件仍是会存在效率上的问题。由于效率只是和预期的时间有关,不会报错,报错表明程序自己出现问题了~
python

 Python学习群:692649595,有大牛答疑,有资源共享!是一个很是不错的交流基地!欢迎喜欢Python的小伙伴!网络

 

因此,为何用python处理大文件总有效率问题?框架

若是工做须要,马上处理一个大文件,你须要注意两点:函数

0一、大型文件的读取效率
面对100w行的大型数据,通过测试各类文件读取方式,得出结论:学习

with open(filename,"rb") as f:
 for fLine in f:
 pass
方式最快,100w行全遍历2.7秒。测试

基本知足中大型文件处理效率需求。若是rb改成r,慢6倍。可是此方式处理文件,fLine为bytes类型。可是python自行断行,仍旧能很好的以行为单位处理读取内容。code

0二、文本处理效率问题
这里举例ascii定长文件,由于这个也并非分隔符文件,因此打算采用列表操做实现数据分割。可是问题是处理20w条数据,时间急剧上升到12s。本觉得是byte.decode增长了时间。遂去除decode全程bytes处理。可是发现效率仍是不好。blog

最后用最简单方式测试,首次运行,最简单方式也要7.5秒100w次。ip

想知道这个方式处理的完整代码是什么吗?扫描文末二维码,联系小编能够获取哦~ci

那么关于python处理大文件的技巧,从网络整理三点:列表、文件属性、字典三个点来看看。

1.列表处理
def fun(x):尽可能选择集合、字典数据类型,千万不要选择列表,列表的查询速度会超级慢,一样的,在已经使用集合或字典的状况下,不要再转化成列表进行操做,好比:

values_count = 0
# 不要用这种的
if values in dict.values():
 values_count += 1
# 尽可能用这种的
if keys,values in dict:
 values_count += 1
后者的速度会比前者快好多好多。

2. 对于文件属性
若是遇到某个文件,其中有属性相同的,但又不能进行去重操做,没有办法使用集合或字典时,能够增长属性,好比将原数据从新映射出一列计数属性,让每一条属性具备惟一性,从而能够用字典或集合处理:

 return '(' + str(x) + ', 1)'
list(map(fun,[1,2,3]))
使用map函数将多个相同属性增长不一样项。

3. 对于字典
多使用iteritems()少使用items(),iteritems()返回迭代器:

>>> d = {'a':1,'b':2}
>>> for i in d.items() :
.... print i
('a',1)
('b',2)
>>> for k,v in d.iteritems() :
... print k,v
('a',1)
('b',2)
字典的items函数返回的是键值对的元组的列表,而iteritems使用的是键值对的generator,items当使用时会调用整个列表 iteritems当使用时只会调用值。

除了如下5个python使用模块,你还有什么技巧解决大文件运行效率的问题吗?扫一扫来和咱们一块儿交流,深刻了解更多Python实用模块,快速提高工做效率~

读写文件技术,从此会用到测试数据的参数化和测试报告写做功能中~

数据处理技术,从此测试脚本的测试数据处理过程能够用到~

数据统计分析技术,从此会在测试结果分析中用到

图表展现技术,在从此的测试框架中相关测试报告会用到

程序自动触发技术,可用于测试脚本程序的自动执行。
 

Python学习群:692649595,有大牛答疑,有资源共享!是一个很是不错的交流基地!欢迎喜欢Python的小伙伴!