Python 逐行从 url 下载大型 csv 文件,只有 10 个条目

che*_*thi 5 python csv

我有一个很大的客户端 csv 文件,并通过 url 共享下载,我想逐行按字节下载它,我只想限制 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)
Run Code Online (Sandbox Code Playgroud)

我不太了解contextlib,它将如何with在 Python 中使用。

任何人都可以在这里帮助我,这真的很有帮助,并提前致谢。

Mad*_*ist 5

问题不在于contextlib发电机,而在于发电机。当你的with块结束时,连接将被关闭,相当简单。

实际执行下载的部分是一个惰性生成器for row in reader:,因为它reader被包裹起来。循环的每次迭代实际上都会从流中读取一行,可能会通过 Python 进行一些内部缓冲。f

关键是在 10 行后停止循环。有几种简单的方法可以做到这一点:

for count, row in enumerate(reader, start=1):
    print(row)

    if count == 10:
        break
Run Code Online (Sandbox Code Playgroud)

或者

from itertools import islice

...

for row in islice(reader, 0, 10):
    print(row)
Run Code Online (Sandbox Code Playgroud)