zoukankan      html  css  js  c++  java
  • 菜鸟利用python处理大文本数据的血泪路

    1. 源数据 Like this:
    格式: .csv和.txt
    内容:(几十万行)
    大小:64.7M 和64.8M 
    电脑:i5-2540M 4G内存
    2.数据更新检测:
    这是一些位置信息图,1和2分别是同一地区不同时期采集的数据,现检测更新的信息。假使以NDP_ID这列数据作为POI的唯一标志码。设定:
     
    如果NDP_ID同时在两个文件中都存在,则判定为没有改变
    如果NDP_ID只存在于1文件中,则判定为信息删减了
    如果NDP_ID只存在于2文件中,则判定为信息增加了
     
    3.代码主要包括三部分:
    - 文件路径的读取,获得批量文件
    - 文件的读取与存储
    - 变化检测
     
    但是在试验中遇到最大的问题是程序处理的时间很漫长:
    程序版本                              1M数据                 65M数据
    第一代for循环白痴程序:     60s                       ——
    第二代列表解析程序:          40s                       ——
    第三代改变数据存储结构:   25S                       ——
    第四代改变key值类型:       12S                        ——
    第五代有序列表查找:          0S                         300S
     
    不是我闲的没事,而是前几个版本的代码跑起65的数据遥遥无期,于是开始查找哪里耗时低,以及python代码书写风格。后来发现在文件遍历比较的时候耗时最大,瓶颈也在于这里,于是开始慢慢分析复杂度:
     
    一代:复杂度m*n*3
    二代:复杂度 m*n*3
    三/四代:复杂度
    五代:复杂度m+n
    事实证明列表解析确实高效于for循环,字典查询优于普通遍历,但是最最能显著提高速度的还是改变算法降低复杂度。代码优美性无助于提高效率。
     
    继续优化下!
  • 相关阅读:
    禅知Pro 1.6 前台任意文件读取 | 代码审计
    wpa破解学习实践
    Natural Merge Sort(自然归并排序)
    [转]the service mysql57 failed the most recent status[/br]mysql57 was not found解决办法
    《Metasploit魔鬼训练营》第七章学习笔记
    Adobe阅读器漏洞(adobe_cooltype_sing)学习研究
    MS10_087漏洞学习研究
    第三方插件渗透攻击之KingView
    《Metasploit魔鬼训练营》虚拟环境搭建中网络配置的一些问题
    KingView 6.53漏洞学习研究
  • 原文地址:https://www.cnblogs.com/I-Tegulia/p/4554822.html
Copyright © 2011-2022 走看看