背景:

今天同事写代码,用python读取一个四五百兆的文件,然后做一串逻辑上很直观的处理。结果处理了一天还没有出来结果。问题出在哪里呢?

解决:

1. 同事打印了在不同时间点的时间,在需要的地方插入如下代码:

print time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))

发现一个规律,执行速度到后面时间越来越长,也就是处理速度越来越慢。

2. 为什么会越来越慢呢?

1)可能原因1,GC 的问题,有篇文章里面写,python list append 的时候会越来越慢,解决方案是禁止GC:

使用 gc.disable()和gc.enable()

2)改完上面,仍然不行,然后看到一篇文章里面写,可能是因为 git 导致的,因为append 的时候 git 会不断同步,会出问题,于是删除 .git 文件夹,结果还是不行。

3)继续查询,发下一个及其有可能出问题的地方。dict 的 in dict.key(),判断 key 是否在 dict 里面,这个的效率是非常低的。看到一篇文章比较了效率:

① 使用 in dict.keys() 效率:

② 使用 has_key() 效率:

发现 has_key() 效率比较稳定。于是修改,问题解决。

后话:

最初的时候,的确是使用 has_key(), 结果后面上传代码的时候,公司代码检查过不了,提示不能使用这个函数,只能改成 in dict.key() 这种方式,为什么公司不让这么传呢?经过一番百度,发现原因所在:在 python3 中,直接将 has_key() 函数给删除了,所以禁止使用。那禁止了该怎么办呢?原来 python 中 in 很智能,能自动判断 key 是否在字典中存在。所以最正规的做法不是 has_key(), 更不是 in dict.keys(), 而是 in dict. 判断 key 在 map 中,千万别用 in dict.keys() !!!

附录:

in、 in dict.keys()、 has_key() 方法实战对比:

>>> a = {'name':"tom", 'age':10, 'Tel':110}

>>> a

{'age': 10, 'Tel': 110, 'name': 'tom'}

>>> print 'age' in a

True

>>> print 'age' in a.keys()

True

>>>

>>> print a.has_key("age")

True

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

参考资料:

https://www.jb51.net/article/145424.htm

时间: 2019-08-05

python读取大文件太慢_python读取大文件越来越慢的原因与解决相关推荐

  1. python读取文件第一行_python读取文件首行和最后一行

    python读取文件最后一行两种方式 1)常规方法:从前往后依次读取 步骤:open打开文件. 读取文件,把文件所有行读入内存. 遍历所有行,提取指定行的数据. 优点:简单,方便 缺点:当文件大了以后 ...

  2. python读取字符串指定位置字符_python读取txt文件中特定位置字符的方法

    python读取txt文件中特定位置字符的方法 如下所示: # -*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding(' ...

  3. python加载图片并显示_python读取目录下所有的jpg文件,并显示第一张图片的示例...

    python读取目录下所有的jpg文件,并显示第一张图片的示例 如下所示: # -*- coding: UTF-8 -*- import numpy as np import os from scip ...

  4. python dialect='excel'是什么意思_python读取和生成excel文件

    今天来看一下如何使用python处理excel文件,处理excel文件是在工作中经常用到的,python为我们考虑到了这一点,python中本身就自带csv模块... 今天来看一下如何使用python ...

  5. python 读取excel太慢_Python 读取excel并转换为字典

    方法一:利用利用xlrd读取excel文件 其实整个过程比较简单,利用xlrd读取excel文件,再把读取到的数据转换为dict即可. 1.安装 xlrd pip install xlrd 2.读取文 ...

  6. python读取excel内容和写入_Python读取和写入Excel文件

    制作Excel表 常用方法说明 Workbook类 Workbook类创建一个XlswWrite的Workbook对象,相当于创建一个excel表 And_worksheet()用来创建工作表,默认为 ...

  7. python读取输入数据的第二行_Python读取键盘输入的2种方法

    如何获取用户的输入 | 手把手教你入门Python之十六 上一篇:三种主要的输出 | 手把手教你入门Python之十五下一篇:进制转换 | 手把手教你入门Python之十七 本文来自于千锋教育在阿里云 ...

  8. mfc读取txt文件并显示_Python入门丨文件读写

    文件读写 文件读写,是Python代码调用调用电脑文件的主要功能,能被用于读取和写入文本记录.音频片段.Excel文档.保存邮件以及任何保存在电脑上的东西. 读取文件 读取文件三个步骤: 准备工作:首 ...

  9. python读取配置文件存在某配置_Python读取ini配置文件的方式

    ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section), 每个节可以有多个参数(键=值).使用的配置 ...

最新文章

  1. 为什么要读源代码,如何阅读源代码
  2. 重载、重写(覆盖)、隐藏(重定义)
  3. 1070 Mooncake (25 分)【难度: 简单 / 知识点: 贪心】
  4. div高度、宽度100% div width、height 100%
  5. 实现自己的.NET Core配置Provider之EF
  6. 生态系统长期观测数据产品体系
  7. LinuxCNC解析(一)之安装Linuxcnc所需要的依赖包
  8. android获取app内存信息,Android 获取内存信息(RAM,ROM)
  9. 图论算法——有向图的可达性与寻路
  10. When I’m old and dying
  11. win xp故障恢复控制台应用实例
  12. Mac电脑如何通过终端隐藏应用程序?
  13. 实现一个简单的H5领红包的动画
  14. IE浏览器页面卡死问题
  15. oracle-经典图书收集
  16. 常用元器件使用方法1:DCDC降压芯片SY8303的使用方法
  17. 一起赚美元⑤ | Instapainting照片转油画服务,通过SEO优化,每月赚取3.2万美元的真实案例
  18. vivado配置zynq硬件
  19. linux mysql mof提权,mysql提权之mof提权
  20. 《重说中国近代史》—张鸣—两个世界的第一次碰撞

热门文章

  1. 每日一皮:这也许是稍微二字最好的诠释...
  2. 实现单机五子棋,难吗?
  3. 2020 年 Java 面试常见 350 题
  4. 解决原子性问题?你首先需要的是宏观理解
  5. IntelliJ IDEA 重大更新:支持CPU火焰图,新增酷炫主题
  6. java 参数 exception_java – 在异常的参数中使用泛型
  7. catia 快捷键 激活零件_CATIA基本操作技巧
  8. 微信商城小程序操作为产品增加颜色尺寸长度等多规格内容
  9. Yolo-FastestV2 移动端可达300FPS,参数量仅250k
  10. 双系统 win10 时间不对