首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python基础-从API请求数据并写入文件

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

Stack Overflow用户
提问于 2016-02-15 19:47:08
回答 2查看 19.8K关注 0票数 5

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

代码语言:javascript
复制
import requests
r = requests.get('https://api.github.com/events')

这是:

代码语言:javascript
复制
with open(filename, 'wb') as fd:
    for chunk in r.iter_content(chunk_size):
        fd.write(chunk)

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

  • 文件名-如果创建了文件,我应该以什么形式提供文件的路径?如果没有,它将被保存在哪里?
  • “‘wb”--这个变量是什么?(第二个参数不是应该是‘模式’吗?)
  • 下面两行可能迭代使用请求检索的数据并将其写入文件

Python的解释也没有多大帮助。

编辑:我想做的是:

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-15 20:04:38

文件名

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

模式

'wb'选项确实是一种模式。'w'表示写,'b'表示字节。当您想从'w'文件中写入(而不是读取)时使用'b',而对二进制文件(而不是文本文件)使用'b'。在本例中使用'b'实际上有点奇怪,因为您正在编写的内容是一个文本文件。在这里指定'w'也同样有效。阅读更多关于开放文档中的模式的内容。

环路

此部分使用来自iter_contentrequests方法,该方法适用于您可能不想同时在内存中使用的大型文件。在这种情况下,这是不必要的,因为所讨论的页面只有89 KB。有关更多信息,请参见请求库文档

结论

您正在查看的示例用于处理最常见的情况,在这种情况下,远程文件可能是二进制的,而且内存中的文件太大。但是,如果您只访问包含文本的小型网页,则可以使您的代码更加可读性和易懂性:

代码语言:javascript
复制
import requests
r = requests.get('https://api.github.com/events')

with open('events.txt','w') as fd:
    fd.write(r.text)
票数 10
EN

Stack Overflow用户

发布于 2016-02-15 19:54:00

filename是要保存它的路径的字符串。它接受本地路径或绝对路径,因此您可以只使用filename = 'example.html'

wb代表WRITE & BYTES,了解更多的这里

for循环遍历整个返回的内容(如果它太大,无法正确处理内存),然后将它们写入,直到没有更多的内容。对于大型文件很有用,但对于单个网页,您可以这样做:

代码语言:javascript
复制
# just W becase we are not writing as bytes anymore, just text.
with open(filename, 'w') as fd: 
    fd.write(r.content)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35417814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档