- A+
提出小型的,具有黑客思维的教程“用Python编辑图像”或“从Python发送电子邮件”的部分原因在于,实际遵循这些步骤的读者的某些子集将最终对该主题感兴趣(s )自己走得更深。 我可以提供详细的食谱,但学习烹饪有点留给读者。 鉴于实际上有许多读者具有许多不同程度的兴趣和现有能力,这可能是一些非常棘手的业务。
所以,让我们花点时间重新组合。 过去的几个“Hack This”专栏以一些非常简单的方式使用了一些非常强大的Python库。 首先,它们基于直接在Python解释器中输入一个或几个命令。 这是一个非常简单,限制,并最终误导事物的方式,因为Python语言和任何其他语言的力量在于将所有这些部分组合成更强大的整体。
这些是我们通常只调用程序的东西,但Python有点奇怪,因为它是一种编程语言,也是一种脚本语言。 我在去年秋天的Unix shell脚本专栏中详细讨论了这个区别,但让我们花点时间回顾一下。
0)脚本101
当我们大多数人考虑计算机“程序”时,我们可能会想到我们在计算机上安装的东西,然后通过单击可执行文件来运行。 该计划栩栩如生,现在拥有一些专门用于其运营的计算机资源,至少在我们关闭之前。 像这样的程序被编译 。 也就是说,它们使用该语言的语法以某种语言编写,然后被送入另一个程序,该程序将代码转换为机器可读的代码。 这是您安装的东西,它是每次运行或执行程序时调用的内容。
脚本与编程有点不同。 您在早期的教程中知道我们如何能够逐行点击Python解释器? 其中的每一个都不会单独编译成机器指令,然后逐个作为可执行程序运行。 这是因为编译已经发生。 这些命令的机器指令已经生成,因此更多的是将命令与动态指令匹配。 这有点像用商店购买的乐高积木而不是熔化塑料。 这些部件是预制的,可以拼接在一起。
因此,Python脚本实际上只是我们可以接入解释器的相同命令的排列,而是一起打包成一个文件。 可以通过使用“python”命令运行Python文件来调用那些命令包,这些命令可以与常规旧计算机程序大致相同。 我们所要做的就是点击:
python <name_of_file.py>
这就是黑客成为编程的地方。
1)你好,世界
这篇文章主要是关于脚本是什么和可以是什么,以及如何开始将事物组合成更复杂和更有用的整体。 它不是Python的介绍或介绍编程的东西,因为宇宙现在肯定不需要它。 它应该有助于为你可能在这里看到的基于Python的黑客/食谱提供一些基础,例如,这些东西如何连接回更大的代码世界并变得强大。
在继续之前,你显然需要安装Python。 它可以从这里下载。 您还需要一个用于编写和编辑脚本的文本编辑器。 我使用Sublime Text,这是伟大的,而不是免费的。 这物有所值。 Atom是它的开源模拟。 任何文本编辑器都可以:Notepad ++,Vim,Emacs,TextWrangler。 Python还有自己的编辑器Idle,我从来没有真正使用它,也不知道任何事情。 请注意,像Word这样的全文字处理器不起作用,因为它们往往包含各种不可见的字符,这些字符会使事情变得混乱。
为了演示整个脚本与解释器的事情,让我们做一些非常非常基本的事情。 在编辑器中创建一个文件并将其另存为hello.py。 只向文件添加一行:
打印“你好,世界”
并保存它。 转到系统的终端或命令行窗口,然后键入以下命令:
python hello.py
你应该看到“你好,世界”,显然。
你所做的只是告诉你的系统在给定文件上运行Python。 如果您收到有关未找到Python或类似内容的错误,则表示您未安装Python或您的系统不知道在哪里可以找到Python程序。 (Python是一个运行其他程序的程序。)这可能会变得棘手,所以只要谷歌你有任何错误,你会很快得到答案。
如果您收到有关未找到脚本文件的错误或某些错误,请注意您需要在与保存脚本的位置相同的位置运行Python。
好了,现在只需在系统的命令行输入“python”即可。 这将启动Python解释器,您可以点击上面的“print ...”命令,只是为了验证它是否确实为您提供相同的输出,无论是在Python解释器中输入还是通过Python脚本调用。
在Python中,“print”是一个保留字,被解释为一个命令,告诉解释器输出到屏幕(除非另有说明)以下字符串,它可以是一对文本卡在一对引号之间,或者它可以是包含字符串的变量。 您应该花几分钟时间查看关于变量和名称的Learn Python the Hard Way部分,以及有关字符串和文本的部分。
2)你好,无论如何
让我们尝试一些不同的东西。 打开hello.py脚本并将其更改为以下内容:
打印“Hello What?”, some_input = raw_input() 打印“你好,%s”%some_input
保存脚本并像以前一样再次运行它。 它应该打印“Hello What?”并等待你输入内容。 点击一两个字,然后按Enter键。 该脚本将打印回“Hello”,然后打印您提供的任何文本。 第二个打印语句看起来有点时髦,但想法是在引号内,占位符“%s”告诉命令查看引号后面输入的内容和另一个“%”。你可以有更多那里有一个占位符“%s”,但是你必须这样做(再次:你应该看一下LPHW的这个部分):
打印“Hello,%s,Goodbye,%s”%(some_input,other_input)
抄写天气
既然我们知道Python脚本的最低限度,那么相对来说,让我们做一些有用的事情。 我在波特兰社区学院大约CS 161计算机科学入门的第一个项目创意之一是制作一个网页,显示来自所有不同来源的用户区域的所有天气预报,例如天气频道,Wunderground,NOAA在同一页上,等等 - 天气预报的皮划艇 - 以及每个来源准确性的运行估计。
这很容易做到,因为所有这些源都有自己的API,例如我们作为程序员可以用来通过我们的程序与站点的原始内容进行交互的标准化协议集
所以,让我们这样做。 不是全部,我的意思是 - 让我们制作一个脚本,它将为我们提供我们提供的任何邮政编码的天气预报。 这里的代码部分基于Stray Marcs的教程。
有两点需要注意。 首先,您会注意到我们正在将两个模块导入到我们的脚本中。 模块基本上是Python库的扩展,您可以安装然后导入到代码中。 在这里阅读更多相关信息。 第二? JSON到底是怎么回事? 好问题。 JSON是一种在整个互联网上使用的数据格式。 JSON对象就像一个值列表和密钥对,我们可以通过引用相应的密钥来提取数据。 在该示例中,我们使用一个函数从Wunderground打开一个URL,然后使用另一个函数以JSON对象的形式向我们提供其内容。
import urllib 导入json
一旦我们说了对象,我们就可以从中得到东西。 可以在API的文档中找到所有可用的内容,但我们只需要做一些事情来保持简单。
首先,让我们的脚本向用户询问他们的邮政编码。 我们将再次使用raw_input函数,但有点不同。 事实证明,我们可以使相同的函数打印提示本身,而不是必须在单独的“打印”语句中。
zip = raw_input(“你在哪儿?”)
现在,我们让脚本创建一个URL,然后询问我们的JSON对象的URL。 请注意,我们需要使用Wunderground API中的密钥才能实现此目的。 在这里注册它需要一秒钟。 API密钥允许位置控制从各种API用户访问其资源的流量,一方面。 基本的免费Wunderground帐户只允许一定数量的API调用,但如果你正在构建一些大而且比较受欢迎的东西,你需要付出更多。
我们像这样构建URL。
url ='http://api.wunderground.com/api/'+ key +'/ geolookup / conditions / q / PA /'+ zip +'。json'
这很容易。
因此,我们打开构造的URL(使用存储在名为“zip”和“key”的变量中的值),然后将内容作为JSON对象读取,然后将其解析为可用的内容。
f = urllib2.urlopen(url) json_string = f.read() parsed_json = json.loads(json_string)
我们所要知道的就是告诉它我们想要什么,我们通过引用API通过这个JSON数据wad向我们提供的各个字段来做。 您只需将上面构建的URL粘贴到浏览器中,即可以本机形式查看数据填充。 这可能有助于理解这个想法以及我们如何获取存储在其中的各种信息。
所以,最后,让我们从这个数据中得到一些东西。 我得到了一个关于天气的一般单词描述以及以华氏度为单位的温度。 然后我打印这两件事。
weather = parsed_json ['current_observation'] ['天气'] temp = parsed_json ['current_observation'] ['temp_f'] 打印'怎么样'+ weather.lower()+'?' print str(temp)+'degrees ??? 那就是胡说八道。
在上面的代码中,我可以使用不同的字符串并使用加号将它们粘贴在一起,这比使用其他语言更方便。 问题是来自JSON data-wad的temp_f字段中的数据是整数而不是字符串。 什么都没说,因为我们没有用类型创建“temp”变量。 它只是接受了等号右侧的东西所发生的任何数据类型,这恰好是一个数字。
在任何情况下,我们使用str()将temp转换为字符串类型,这允许我们将其拼接到其他字符串。 这是整个脚本:
import urllib2 导入json key ='yourkeygoeshere' zip = raw_input('您希望看到天气的邮政编码?') url ='http://api.wunderground.com/api/'+ key +'/ geolookup / conditions / q / PA /'+ zip +'。json' f = urllib2.urlopen(url) json_string = f.read() parsed_json = json.loads(json_string) weather = parsed_json ['current_observation'] ['天气'] temp = parsed_json ['current_observation'] ['temp_f'] 打印'怎么样'+ weather.lower()+'?' print str(temp)+'degrees ??? 那就是胡说八道。“ f.close()
这是一些输出。 确实,这是胡说八道。
从API获取一些天气信息不是很有趣,但我们会到达那里。 这里的要点只是为了演示如何在脚本中一起使用简单的Python命令。 在这个门槛的另一边,有一切都是从被黑客攻击的机器人到整个软件框架。 我们将从Twitter机器人开始。
出处:http://motherboard.vice.com/