用python在Linux中写wordCount脚本

Linux 环境下运行python代码

1、切换到想存放代码文件的目录下,打开vim编辑器,语句为:vim mapper.py,于是创建了一个名为mapper.py的python文件,敲击 i 字母随即进入vim编辑状态(具体vim编辑器常用操作请看这篇文章:vim编辑器的常用汇总操作)
2、编辑好之后保存退出,同上步,建立reduce.py文件,编辑成功后,输入 echo xiao fd fd sd sd | python mapper.py | python reduce.py 运行程序。

详细代码分为两部分
1、mapper.py

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import sys
for line in sys.stdin:   #读取标准输入
 line = line.strip()  #删除前导和尾随空白
 words = line.split() #用split讲该行的单词分割成列表,每个单词就时一个列表项目,split的默认参数是空格,所以不传递任何参数时分割空格,在英文中也就等同于分割单词
for word in words:
        print'%s\t%s'%(word,1)

运行:echo xiao fd fd sd sd | python mapper.py
结果如下:
在这里插入图片描述

2、reduce.py

#!/usr/bin/env python
#_*_coding:utf-8_*_
import sys

word2count = {} #定义一个字典
for line in sys.stdin:
	line = line.strip() #去除首尾空格换行
	word,count = line.split('\t',1)
	try: #捕捉try代码块里可能的异常。当程序有异常时加了try except能按用户定义的逻辑处理,而不加的话程序出现错误就停止运行了
		count = int(count)
		word2count[word] = word2count.get(word,0)+count #word2count.get(word,0),查找word键值,如果不存在返回0,如果存在返回键值
	except ValueError: #这里的try-except含义是强制转换count为int类型,如果出错,则略过该语句,继续执行下面内容
		pass
for word in word2count:
	print'%s\t%s'%(word,word2count[word])

运行:echo xiao fd fd sd sd | python mapper.py | python reduce.py
结果如下:
在这里插入图片描述至此以成功运行wordCount

—————————————我是分割线———————————————

下面讲解部分代码细节帮助理解:

#!/usr/bin/env python

脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它
#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器;
#!/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。
#!/usr/bin/python相当于写死了python路径;
#!/usr/bin/env python会去环境设置寻找python目录,推荐这种写法
————————————————
引自:https://blog.csdn.net/wh_19910525/article/details/8040494

#* coding:utf-8 *

PY文件当中是不支持中文的,即使你输入的注释是中文也不行,为了解决这个问题,
如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码。

import sys

引入sys模块,其中:
stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象

python中使用sys.stdin.readline()可以实现标准输入,注意默认输入的是字符串,如果是int,float类型则需要强制转换,正如代码中的:
count=int (count)。

input()方法和stdin()类似,不同的是input()括号内可以直接填写说明文字。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自律也自由

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值