stream=True ช่วยให้เริ่มประมวลผลได้ก่อนที่เนื้อหาการตอบกลับผ่านพร็อกซีจะดาวน์โหลดเสร็จทั้งหมด สำหรับ CSV ให้ส่งตัววนซ้ำบรรทัดข้อความไปยัง csv.reader เพื่อให้ตัวคั่นภายในเครื่องหมายคำพูดและระเบียนหลายบรรทัดยังคงเป็นข้อมูล CSV

สำหรับไฟล์ UTF-8 ตัวอย่างที่ใช้อัฒภาค:

import csv
import requests

routes = {'https': 'http://proxy.example:8080'}
with requests.get(
    'https://data.example/observations.csv',
    proxies=routes,
    stream=True,
    timeout=(5, 30),
) as response:
    response.raise_for_status()
    response.encoding = 'utf-8'
    lines = (
        line + '\n'
        for line in response.iter_lines(
            chunk_size=65536, decode_unicode=True)
    )
    for record in csv.reader(lines, delimiter=';'):
        if record and record[0] == 'wanted':
            print(record)
            break

เลือกการเข้ารหัสและภาษาถิ่นจริงของไฟล์ สำหรับการดาวน์โหลด CSV สาธารณะผ่านเส้นทางพร็อกซีสาธารณะที่ได้รับอนุญาต รายการพร็อกซี HTTP มีผู้สมัครสำหรับ URL routes เวอร์ชันนี้ปรับบรรทัดจบทางกายภาพให้เป็น LF: iter_lines จะลบออก และตัวสร้างจะเพิ่มบรรทัดใหม่กลับให้ตัวแยกวิเคราะห์ CSV สิ่งนี้สำคัญเมื่อฟิลด์ในเครื่องหมายคำพูดต่อเนื่องไปยังอีกบรรทัดทางกายภาพ

สำหรับเวิร์กโฟลว์ที่ต้องการรักษาอักขระ CRLF ที่ฝังอยู่ให้แม่นยำระดับไบต์ ให้ใช้อุปกรณ์ห่อข้อความแบบสตรีมที่รักษาการจบบรรทัดเหล่านั้นไว้ การปรับให้เป็นมาตรฐานโดยเจตนาในตัวอย่างเหมาะกับการประมวลผลที่เน้นระเบียนซึ่ง LF เป็นการแทนค่าที่ต้องการ

หนึ่งการตอบกลับ หลายการอ่าน

ตัววนซ้ำใช้ชิ้นข้อมูลจากการตอบกลับ HTTP เพียงครั้งเดียว ไม่ได้ส่งคำขอใหม่สำหรับทุกบรรทัด คำขอ HTTP Range เป็นกลไกอื่นและไม่ได้ระบุขอบเขตระเบียน CSV ตามธรรมชาติ

การเรียก response.text หรือรวบรวมทุกแถวไว้ในรายการจะนำเนื้อหาทั้งหมดกลับเข้าหน่วยความจำ การสตรีมยังต้องใช้พื้นที่สำหรับบัฟเฟอร์การขนส่งและระเบียนปัจจุบัน ซึ่งอาจมีฟิลด์ขนาดใหญ่ได้เอง

บริบทการตอบกลับจะปิดเนื้อหาเมื่อออกจากลูป รวมถึงเมื่อพบรายการตรงแต่เนิ่น เลกเวลาการอ่านจำกัดการรอข้อมูลขาเข้า ไม่ใช่อายุทั้งหมดของการถ่ายโอนไฟล์ขนาดใหญ่

บทความที่เกี่ยวข้อง