Skip to main content
 首页 » 编程设计

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

2025年05月04日15sharpest

我正在尝试使用“请求”包并从 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)