我正在尝试使用“请求”包并从 Github 检索信息,就像请求文档页面解释的那样:
import requests
r = requests.get('https://api.github.com/events')
还有这个:
with open(filename, 'wb') as fd:
for chunk in r.iter_content(chunk_size):
fd.write(chunk)
我不得不说我不明白第二个代码块。
- 文件名 - 如果创建了文件,我以什么形式提供文件路径?如果没有保存到哪里?
- 'wb' - 这个变量是什么? (第二个参数不应该是'mode'吗?)
- 以下两行可能遍历请求检索的数据并写入文件
Python 文档解释也没有多大帮助。
编辑:我正在尝试做的事情:
- 使用 Requests 连接到 API(Github 和后来的 Facebook GraphAPI)
- 将数据检索到变量中
- 将其写入文件(稍后,随着我对 Python 越来越熟悉,写入我本地的 MySQL 数据库)
请您参考如下方法:
文件名
当使用 open 时,路径是相对于您当前目录的。所以如果你说 open('file.txt','w') 它会在你的 python 脚本所在的任何文件夹中创建一个名为 file.txt 的新文件。你也可以指定绝对路径,比如linux中的/home/user/file.txt。如果名称为 'file.txt' 的文件已经存在,则内容将被完全覆盖。
模式
'wb' 选项确实是模式。 'w' 表示写入,'b' 表示字节。当您想从文件中写入(而不是读取)时,您可以使用 'w',而对于二进制文件(而不是文本文件),您可以使用 'b'。在这种情况下使用 'b' 实际上有点奇怪,因为您正在编写的内容是一个文本文件。在这里指定 'w' 也同样有效。在 docs for open 中阅读有关模式的更多信息.
循环
这部分使用了 requests 中的 iter_content 方法,它适用于您可能不想一次性全部放在内存中的大文件。在这种情况下这是不必要的,因为有问题的页面只有 89 KB。查看requests library docs了解更多信息。
结论
您正在查看的示例旨在处理最常见的情况,在这种情况下,远程文件可能是二进制文件并且太大而无法保存在内存中。但是,如果您只访问包含文本的小网页,我们可以使您的代码更具可读性和易于理解:
import requests
r = requests.get('https://api.github.com/events')
with open('events.txt','w') as fd:
fd.write(r.text)
