这几天刚处理一个排序问题

源文件: 可以看到有11G大小,需要根据最后一列的热度来做一下排序.如果让你来做这样的排序,在linux环境下,你会如何处理呢?

xch27@lanzhou:/asrdata/users/xch27/lmwork/comm_cloud/aicar_solution/v32_30june2017/data/navi/slot/big$ ls -lh 全量数据_0620.txt
-rw-r--r--. xch27 alab 11G 7月 : 全量数据_0620.txt
xch27@lanzhou:/asrdata/users/xch27/lmwork/comm_cloud/aicar_solution/v32_30june2017/data/navi/slot/big$ head 全量数据_0620.txt
北京南顺油脂有限公司 BeiJing NanShun YouZhi YouXianGongSi 良乡南肖庄道口西 公司企业;公司;公司 北京市 北京市 房山区 9.6901977
松园派出所 SongYuan PaiChuSuo 松园村 政府机构及社会团体;公检法机构;公安警察 北京市 北京市 昌平区 3004.3764856
西园村 XiYuanCun 地名地址信息;普通地名;村庄级地名 北京市 北京市 昌平区 73.406943
仁和镇人民政府 RenHeZhen RenMin ZhengFu 仁和镇政府 顺平西路9号 政府机构及社会团体;政府机关;乡镇级政府及事业单位 北京市 北京市 顺义区 2374.4912286
中国建设银行(北京三元桥支行) ZhongGuo JianShe YinHang (BeiJing SanYuan Qiao ZhiHang) 左家庄路1号国门大厦B座1层 金融保险服务;银行;中国建设银行 北京市 北京市 朝阳区 2617.5249994
北京糖业烟酒集团有限公司酒类经营分公司 BeiJing TangYe YanJiu JiTuan YouXianGongSi Jiu LeiJingYing FenGongSi 永定路23号 公司企业;公司;公司 北京市 北京市 海淀区 1434.2144127
东马坊小学 DongMaFang XiaoXue 东马坊20号 科教文化服务;学校;小学 北京市 北京市 海淀区 2549.257087
北辰汇宾大厦 BeiChen HuiBin DaSha 北辰东路8号院- 商务住宅;楼宇;商务写字楼 北京市 北京市 朝阳区 10420.9972344
北京世纪银嘉文化发展有限公司 BeiJing ShiJi YinJia WenHua FaZhan YouXianGongSi 花园路30号花园商务会馆6层6216 公司企业;公司;公司 北京市 北京市 海淀区
向明食品店 XiangMing ShiPinDian 南二环与南二环出口交叉口西南50米 购物服务;便民商店/便利店;便民商店/便利店 北京市 北京市 东城区 3.3185239

方法一:

我首先用python来解决:   可以看出代码还是略显复杂,其中排序算法,我用的是列表自带的sort方法,也可以自己写,参考上一篇文章,用里面的归并排序.但是这个程序最大的问题是什么?有两个,一个是慢,另一个是太耗内存

我用的是超算集群跑的,本地程序肯定卡死了,下面我贴了张top的截图,可以看看他用了多少内存,跑了多久,我写这篇记录的时候还没跑完呢,我看看他要跑多久.

#!/usr/bin/python
#coding=utf-8
#__author__='dahu'
#data=2017-
# 处理数据,整理成标准格式
import sys,collections
from operator import itemgetter
def file_pro(filename):
with open(filename,'r') as f:
for line in f:
yield line if __name__ == '__main__':
gen=file_pro(sys.argv[1])
#gen=file_pro('tmp')
block=collections.OrderedDict()
ll=[]
with open(sys.argv[2],'w') as f:
#with open('new_tmp.sort', 'w') as f:
k=0
for line in gen:
line_list=line.split('\t')
line_list=[line.strip() for line in line_list]
value=['名称','拼音','别称','地址','类型','省','市','区县','热度']
block=collections.OrderedDict(zip(value,line_list))
a=0 if block['热度']=='' else block['热度']
block['热度']=float(a)
ll.append(block.copy())
block.clear() ll.sort(reverse=True,key=itemgetter('热度')) for i in ll:
for key in i:
f.write('%s:%s\n'%(key,i[key]))
f.write('\n')
if not k%100000:
print k
k+=1
xch27@taiyuan:/asrdata/users/xch27/lmwork/comm_cloud/aicar_solution/v32_30june2017/data/navi/slot$ python lineprocess_sort.py 全量数据_0620.txt lineprocess_sort.txt

方法2:

这个就牛逼了,10min就搞完了,顺序已经排好了,格式就不是问题了,再用awk修改下输出格式就ok了,看来大量数据的处理方式还是尽量少用python,  linux 自带的awk和其他的实用程序是个不错的选择.~

#awk '{printf("%f>>>%s\n",$NF,$0)}' 全量数据_0620.txt|sort -nr > awk.method.txt  #非常快速的一个方法!比python快n倍

为什么可以这么快! awk 与python的应用的更多相关文章

  1. 快排的python实现

    快排的python实现 #python 2.7 def quick_sort(L): if len(L) <= 1: return L else: return quick_sort([lt f ...

  2. 天下武功,无快不破,Python开发必备的6个库

    01 Python 必备之 PyPy PyPy 主要用于何处? 如果你需要更快的 Python 应用程序,最简单的实现的方法就是通过 PyPy ,Python 运行时与实时(JIT)编译器.与使用普通 ...

  3. awk,perl,python的命令行参数处理

    Python,Perl,Bash命令行参数 Part I 日常经常性的和Perl,Python,Bash打交道,但是又经常性的搞混他们之间,在命令行上的特殊性和index的区别,Python真的是人性 ...

  4. 百度快排发包python核心源码

    本源码仅供测试,发包有风险,优化还是踏实的好!本代码是本人自己学习python练手作品!  附上代码: # -*- coding: utf-8 -*-from selenium import webd ...

  5. 将基因组数据分类并写出文件,python,awk,R data.table速度PK

    由于基因组数据过大,想进一步用R语言处理担心系统内存不够,因此想着将文件按染色体拆分,发现python,awk,R 语言都能够非常简单快捷的实现,那么速度是否有差距呢,因此在跑几个50G的大文件之前, ...

  6. 利用Python进行数据分析-Pandas(第四部分-数据清洗和准备)

    在数据分析和建模的过程中,相当多的时间要用在数据准备上:加载.清理.转换以及重塑上.这些工作会占到分析时间的80%或更多.有时,存储在文件和数据库中的数据的格式不适合某个特定的任务.研究者都选择使用编 ...

  7. Python 学习手册, char 14 - 15

    Char 14 迭代器和解析器 可迭代的 : 支持iter的一个对象 迭代器  : iter 所返回的一个支持next(I)的对象 Python迭代工具会自动调用这些函数,我们也可以手动地应用迭代协议 ...

  8. 【Python大系】Python快速教程

    感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库, ...

  9. python 数据处理学习pandas之DataFrame

    请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...

随机推荐

  1. 基础学习笔记之opencv(24):imwrite函数的使用

    http://www.cnblogs.com/tornadomeet/archive/2012/12/26/2834336.html 前言 OpenCV中保存图片的函数在c++版本中变成了imwrit ...

  2. ICPC 2018 南京网络赛 J Magical Girl Haze(多层图最短路)

    传送门:https://nanti.jisuanke.com/t/A1958 题意:n个点m条边的路,你有k次机会将某条路上的边权变为0,问你最短路径长度 题解:最短路变形,我们需要在常规的最短路上多 ...

  3. python中如何优雅使用import

    http://note.youdao.com/noteshare?id=c55be6a8565f5eb586aa52244b3af010

  4. C语言 ------ #undef 的使用

    #undef 是在后面取消以前定义的宏定义 该指令的形式为 #undef 标识符 其中,标识符是一个宏名称.如果标识符当前没有被定义成一个宏名称,那么就会忽略该指令. 一旦定义预处理器标识符,它将保持 ...

  5. Qt ------ 获取 wifi 信息

    QProcess:可以调用外部进程 netsh wlan show interfaces:可以查看连接哪个wifi netsh wlan show networks:显示所有可用的wifi netsh ...

  6. RabbitMQ消息分发轮询和Message Acknowledgment

    一.消息分发 RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费. 多个消费者可以订阅同一个Q ...

  7. 10个有关String的面试问题

    下面是面试中最容易问到的有关String的问题. 1. 如何比较两个字符串?使用"=="还是equals()方法? 简单来讲,"=="测试的是两个对象的引用是否 ...

  8. vue 拦截器

    拦截器:请求发送之前和请求返回之后的处理 使用:1.config---dev.env.js 开发环境配置 2. prod.env.js 生产 API:'http://www.wpdic.com' 3. ...

  9. XML签名Cannot resolve element with ID XXXX 解决方案

    最近同银行做接口联调,需要对XML文件做加签和解签操作,本地的开发环境是Mac 10.10,JDK的版本是1.6.0.65.小小的一段加签代码,一直报错,却久久也找不到解决方法,网上的资料非常少,错误 ...

  10. linux之nginx的安装

    (一)这次是自己折腾服务器的环境,所以自己算是都装过一遍,在装的过程中也是在网上搜索,其实最后在公司运维的指导下知道自己安装出错在哪里的.不说了,直接说安装和问题 (二):首先从 http://ngi ...