用python编程读取TXT时,数据大概有1千万条,速度很慢如何解决?
程序没什么问题, 只是内存占用会很大,估计你的机器跑不动. 建议用numpy库来处理, 具体用法请自行百度.
python处理上千万行数据 python处理千万级数据
用list慢 而且占空间 比如你开辟大小为10的list 可能是开辟了20空间的array 而且list extend时容量满了会开辟一个更大的空间 然后进去 再追加新的内容 你要非用list 就不要a = [] 直接写上大小更好 能减少很多的操作
其实上很简单,两行代码就可以搞定
>>> a=open(r'C:\Users\Administrator\Desktop\123.txt', 'r+')
>>> print a.readlines()
一千万行,当然慢了。
考虑把文件拆分成多了小问题分别处理。
放在数组中,数组的扩展函数很耗时间,而且数组越大,时间消耗越大
放在map中试试吧
用程序导数据那种语言效率高比如 php python ruby perl等,处理上千万条数据,php我的用10分钟导一次
在同一的机器上用类似的算法,并且统一编译成字节码或者统一不编译,处理大量文本数据的效率主要看语言解释器时,效率由高到低大致是 perl, python, php, ruby, perl 明显快,尤其涉及正则表达式处理时,ruby 明显慢,即使用新的 Ruby 2.2.0 解释器,旧的 ruby 解释器更慢。
使用python编程处理大量数据,效率太慢怎么解决
循环本身是没有什么耗时的;恐怕资源消耗于数字a的反复调整变化上;
如果内存资源充裕的话建议不对数组a进行del操作,而是顺序地将满足条件的数据添加到新数组中。
用cython加速可能会好点。
将数据分片处理是不是好些。
要用python从几百万行数据的文件一行行读数据并计算,如何处理快,哪位大牛可以指点一下
应该用readline(),而不是readlines()
f0=file('test.txt','r')
while True:
a=f0.readline()
print a
if a=='':break
python 速度确实不慢,有人测试过readline和sed有一拼
a=open(filename).readlines()
for line in a:
.....
python 循环内要处理大量数据时怎么优化
先尝试优化程序的时间复杂度,寻找更有效的算法
确保了算法复杂度在可接受范围之内后,开始进行常数优化,以下是Python优化的几个小技巧:
实测表明,for语句一般比while语句效率更高
同样实测表明,xrange一般比range要高效
如果要存储动态数据(即有可能频繁变动的数据)少用list和str,多用dict
实测表明,
两个str的连接效率从高到低+=,join,+
多个str的连接效率从高到低join,+=,+
尽可能使用列表解析表达式和生成器表达式代替循环一遍来构建list
避免使用global关键字,无论是从代码效率还是可移植性的方面考虑
Python 适合大数据量的处理吗
适合大数据处理。而不是大数据量处理。 如果大数据量处理,需要采用并用结构,比如在hadoop上使用python,或者是自己做的分布式处理框架。
大数据量处理使用python的也多。如果单机单核单硬盘大数据量(比如视频)处理。显然只能用c/c++语言了。
大数据与大数据量区别还是挺大的。 大数据意思是大数据的智慧算法和应用。 大数据量,早在50年前就有大数据量处理了。 大约在95年左右,大量引入PC机的大数据量处理。一个模型计算数据量大,而且计算时间通常超过一个星期,有时候要计算半年。
气象,遥感,,模式识别,模拟计算的数据量与计算量都是巨大的。当时远远超过互联网。 后来互联网发起起来以后数据量才上去。即使如此,数据的复杂度也还是比不上科学研究领域的数据。
python早些年就在科学研究和计算领域有大量的积累。所以现在python应用到大数据领域就是水到渠成。
题主所谓的大数据量,不知到底有多大的数据量呢?按照我的经验,Python处理个几亿条数据还是绰绰有余的。但,倘若题主想要处理PB级别的数据,单纯依靠Python是不行的,还需要一些分布式算法来进行辅助。
其实,大多数公司的数据量并不大,就拿我们数据分析师行业来说。大多数的数据分析师所处理的数据,很少有上百万的数据量。当然,也有一些数据分析师是要处理上万上亿的数据量的,但占比是没有前者多的。
因此,当今数据分析领域中活跃的工具并不是Python,反而是Excel。当然,Excel作为数据的处理工具是有其独到之处。灵活的函数功能+一力降十会的数据表能让用户对Excel如视珍宝。
但很遗憾,Excel就有数据量大小的限定,Excel记录数事不能超过105万的。超过这个数据限制,要么分表统计,要么就使用sql或者Python来进行数据分析。
通常在工作中,我就经常将几百个表用python进行合并,做简单的清洗工作。而一旦清洗完毕,用抽样工具一抽我们就可以进行抽样以及数据分析了。
希望对你有所帮助,欢迎评论。
python可以处理大数据,但是python处理大数据不一定是的选择
百万级别数据是小数据,python处理起来不成问题,python处理大数据还是有些问题的
绝大部分的大公司,用ja处理大数据不管是环境也好,积累也好,都会好很多
python线程有gil,通俗说就是多线程的时候只能在一个跑道上跑,浪费了多跑道服务器。在一种常见的场景下是要命的:并发单元之间有巨大的数据共享或者共用,多进程会导致内存闪红,多线程则解决不了数据共享的问题,单独的写一个进程之间负责维护读写这个数据不仅效率不高而且麻烦
python执行效率不高,在处理大数据的时候,效率不高。
Python的优势:
python的优势不在于运行效率,而在于开发效率和高可维护性。针对特定的问题挑选合适的工具,本身也是一项技术能
异常快速的开发速度,代码量非常的少
公司中,很大量的数据处理工作工作是不需要面对非常大的数据的
百万级别数据是小数据,python处理起来不成问题,但python处理数据还是有些问题的
Python处理大数据的劣势:
1、python线程有gil,通俗说就是多线程的时候只能在一个核上跑,浪费了多核服务器。在一种常见的场景下是要命的:并发单元之间有巨大的数据共享或者共用(例如大dict),多进程会导致内存吃紧,多线程则解决不了数据共享的问题,单独的写一个进程之间负责维护读写这个数据不仅效率不高而且麻烦
2、python执行效率不高,在处理大数据的时候,效率不高,这是真的,pypy(一个jit的python解释器,可以理解成脚本语言加速执行的东西)能够提高很大的速度,但是pypy不支持很多python经典的包,例如numpy(顺便给pypy做做广告,土豪可以捐赠一下PyPy - Call for donations)
3、绝大部分的大公司,用ja处理大数据不管是环境也好,积累也好,都会好很多
Python处理数据的优势(不是处理大数据):
1、异常快捷的开发速度,代码量巨少
2、丰富的数据处理包,不管正则也好,html解析啦,xml解析啦,用起来非常方便
3、内部类型使用成本巨低,不需要额外怎么操作(ja,c++用个map都很费劲)
4、公司中,很大量的数据处理工作工作是不需要面对非常大的数据的
5、巨大的数据不是语言所能解决的,需要处理数据的框架(hadoop, mpi。。。。)虽然小众,但是python还是有处理大数据的框架的,或者一些框架也支持python
6、编码问题处理起来太太太方便了
综上所述:
1、python可以处理大数据
2、python处理大数据不一定是的选择
3. python和其他语言(公司主推的方式)并行使用是非常不错的选择
4. 因为开发速度,你如果经常处理数据,而且喜欢linux终端,而且经常处理不大的数据(100m一下),还是学一下python
用Python来做整个流程的框架,然后核心的CPU密集操作部分调用C函数,这样开发效率和性能都不错,但缺点是对团队的要求又高了(尤其涉及到Python+C的多线程操作)...所以...鱼与熊掌不可兼得。如果一定要兼得,必须得自己。
需要澄清两点之后才可以比较全面的看这个问题:
1. 百万行级不算大数据量,以目前的互联网应用来看,大数据量的起点是10亿条以上。
2.处理的具体含义,如果是数据载入和分发,用python是很高效的;如果是求一些常用的统计量和求一些基本算法的结果,python也有现成的高效的
库,C实现的和并行化的;如果是纯粹自己写的算法,没有任何其他可借鉴的,什么库也用不上,用纯python写是自讨苦吃。
python的优势不在于运行效率,而在于开发效率和高可维护性。针对特定的问题挑选合适的工具,本身也是一项技术能力。
如何用python快的获取大文件的后几行
工作中经常会遇到处理日志文件的问题:为了得到日志的新状态,我们需要获取日志文件的后部分行来做判断。那么,这种情况下我们应该怎么做呢?
1)常规方法:从前往后依次读取
步骤:open打开日志文件。
读取文件,获取文件的总行数。
遍历所有行,提取指定行的数据。
优点:简单,方便
缺点:当文件大了以后时间太慢,无法忍受
2)方法:
步骤:open打开日志文件。
移动文件读取指针到文件末尾。
从后往前移动指针直到合适的位置。
读取文件,提取指定行的数据。
优点:时间相对固定,适合处理大文件
示例:
[python] view plain copy
logFile = open('logFilePath.log', 'r')
logFile.seek(0,2)
logFile.seek(-1000000,2)
rowCount = 0
for row in logFile.readlines()[1:]:
pass
seek():移动文件读取指针到指定位置
tell():返回文件读取指针的位置
seek()的三种模式:
(1)f.seek(p,0) 移动当文件第p个字节处,位置
(2)f.seek(p,1) 移动到相对于当前位置之后的p个字节
(3)f.seek(p,2) 移动到相对文章尾之后的p个字节
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。