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()括号内可以直接填写说明文字。