我有一个大的csv文件的客户端和共享通过一个网址下载,我想下载它逐行或字节,我只想限制10个条目。在
我有下面的代码,将下载文件,但我想在这里只下载文件的前10个条目,我不想完整的文件。在
#!/usr/bin/env python
import requests
from contextlib import closing
import csv
url = "https://example.com.au/catalog/food-catalog.csv"
with closing(requests.get(url, stream=True)) as r:
f = (line.decode('utf-8') for line in r.iter_lines())
reader = csv.reader(f, delimiter=',', quotechar='"')
for row in reader:
print(row)
我不太了解contextlib
,它将如何与Python中的with
一起工作。在
有谁能在这里帮我,这将是非常有帮助,并提前感谢。在
问题不在于
contextlib
,而在于生成器。当您的with
块结束时,连接将被关闭,相当直接。在实际下载的部分是
for row in reader:
,因为reader
被包装在f
周围,这是一个惰性生成器。实际上,每一个Python循环都可能从内部循环中读取。在关键是在10行之后停止循环。有几种简单的方法:
或者
^{pr2}$熊猫也是一种方法:
您可以通过制作一个生成器来概括这个想法,该生成器将在每次调用时生成下一个n行。来自
itertools
模块的grouper
配方对于这样的事情很有用。在这肯定会缓冲一些数据,因为调用很快,但我不认为它是在下载整个文件。我得用一个大文件来测试。在
相关问题 更多 >
编程相关推荐