我正在尝试使用“请求”包并从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)
我不得不说我不理解第二个代码块。
Python文档解释也没有多大帮助。
编辑:我想做的事情:
答案 0 :(得分:4)
使用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中的模式。
此部分使用iter_content
中的requests
方法,该方法适用于您可能不想在内存中同时使用的大型文件。在这种情况下,这是不必要的,因为有问题的页面只有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)
答案 1 :(得分:2)
filename = 'example.html'
是您要将其保存的路径的字符串。它接受本地路径或绝对路径,因此您只能拥有wb
WRITE
代表BYTES
& # just W becase we are not writing as bytes anymore, just text.
with open(filename, 'w') as fd:
fd.write(r.content)
,了解详情documentation
for循环遍历整个返回的内容(以块为单位,因为它太大而无法进行正确的内存处理),然后将它们写入,直到不再有内容为止。适用于大型文件,但对于单个网页,您可以这样做:
Insert into yourtable(id, Part, Seq, Model)
Select 6, 'Groin', ISNULL(max(Seq),0) + 1, 3
From yourtable
where MODEL = 3;