我正在尝试使用“请求”包并从Github检索信息,就像Requests页面解释的那样:
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)我不得不说我不理解第二个代码块。
Python的解释也没有多大帮助。
编辑:我想做的是:
发布于 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_content的requests方法,该方法适用于您可能不想同时在内存中使用的大型文件。在这种情况下,这是不必要的,因为所讨论的页面只有89 KB。有关更多信息,请参见请求库文档。
结论
您正在查看的示例用于处理最常见的情况,在这种情况下,远程文件可能是二进制的,而且内存中的文件太大。但是,如果您只访问包含文本的小型网页,则可以使您的代码更加可读性和易懂性:
import requests
r = requests.get('https://api.github.com/events')
with open('events.txt','w') as fd:
fd.write(r.text)发布于 2016-02-15 19:54:00
filename是要保存它的路径的字符串。它接受本地路径或绝对路径,因此您可以只使用filename = 'example.html'。
wb代表WRITE & BYTES,了解更多的这里
for循环遍历整个返回的内容(如果它太大,无法正确处理内存),然后将它们写入,直到没有更多的内容。对于大型文件很有用,但对于单个网页,您可以这样做:
# just W becase we are not writing as bytes anymore, just text.
with open(filename, 'w') as fd:
fd.write(r.content)https://stackoverflow.com/questions/35417814
复制相似问题