Python 基础 - 从 API 请求数据并写入文件

Ale*_*uck 4 python file-io

我正在尝试使用“请求”包并从 Github 检索信息,就像请求文档页面解释的那样:

import requests
r = requests.get('https://api.github.com/events')
Run Code Online (Sandbox Code Playgroud)

和这个:

with open(filename, 'wb') as fd:
    for chunk in r.iter_content(chunk_size):
        fd.write(chunk)
Run Code Online (Sandbox Code Playgroud)

我不得不说我不理解第二个代码块。

  • 文件名 - 如果创建文件,我以什么形式提供文件的路径?如果没有,它会保存在哪里?
  • 'wb' - 这个变量是什么?(第二个参数不应该是'mode'吗?)
  • 以下两行可能遍历请求检索的数据并写入文件

Python 文档解释也没有多大帮助。

编辑:我正在尝试做的事情:

  • 使用请求连接到 API(Github 和更高版本的 Facebook GraphAPI)
  • 将数据检索到变量中
  • 将其写入文件(稍后,随着我对 Python 越来越熟悉,写入我的本地 MySQL 数据库)

The*_*hwa 7

文档名称

使用open路径时是相对于当前目录的。所以如果你open('file.txt','w')说它会file.txt在你的python脚本所在的任何文件夹中创建一个新文件。你也可以指定一个绝对路径,例如/home/user/file.txt在linux中。如果同名文件'file.txt'已经存在,则内容将被完全覆盖。

模式

'wb'选项是确实的模式。所述'w'装置写入和'b'手段字节。您可以使用'w',当你要写(而非读取)弗罗马文件,并使用'b'二进制文件(而不是文本文件)。'b'在这种情况下使用实际上有点奇怪,因为您正在编写的内容是一个文本文件。指定'w'在这里也同样有效。阅读有关open 文档中的模式的更多信息。

循环

这部分使用iter_contentfrom 方法requests,该方法用于处理您可能不希望一次性全部放入内存的大文件。在这种情况下这是不必要的,因为有问题的页面只有 89 KB。有关更多信息,请参阅请求库文档

结论

您正在查看的示例旨在处理最一般的情况,其中远程文件可能是二进制文件并且太大而无法在内存中。但是,如果您只访问包含文本的小网页,我们可以使您的代码更具可读性和易于理解:

import requests
r = requests.get('https://api.github.com/events')

with open('events.txt','w') as fd:
    fd.write(r.text)
Run Code Online (Sandbox Code Playgroud)