Çok satırlı CSV kayıtlarını Python Requests ve csv.reader ile akış olarak işleyin
Proxy üzerinden gelen yanıtı csv.reader'a akıtın ve her fiziksel satırı ayırıcıdan bölmek yerine kayıt sınırlarını koruyun.
stream=True, proxy üzerinden gelen bir yanıtın gövdesi tamamen indirilmeden önce işlemenin başlamasını sağlar. CSV için csv.reader'a bir metin satırı yineleyicisi verin; böylece tırnak içindeki ayırıcılar ve çok satırlı kayıtlar CSV verisi olarak kalır.
Noktalı virgül kullanan örnek bir UTF-8 dosyası için:
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
Dosyanın gerçek kodlamasını ve lehçesini seçin. İzin verilen bir genel proxy yolunda genel CSV indirmesi için HTTP proxy listesi routes URL'si için adaylar sunar. Bu sürüm fiziksel satır sonlarını LF'ye normalleştirir: iter_lines bunları kaldırır ve üretici CSV ayrıştırıcısı için yeniden bir satır sonu ekler. Bu, tırnak içindeki bir alan başka bir fiziksel satıra devam ettiğinde önemlidir.
Gömülü CRLF karakterlerinin bayt düzeyinde tam olarak korunmasını gerektiren iş akışları için bu satır sonlarını koruyan akışlı bir metin sarmalayıcı düzeni kullanın. Örnekteki kasıtlı normalleştirme, LF'in amaçlanan gösterim olduğu kayıt odaklı işleme için uygundur.
Tek yanıt, çok okuma
Yineleyici tek bir HTTP yanıtından parçalar tüketir. Her satır için yeni bir istek göndermez. HTTP Range istekleri farklı bir mekanizmadır ve CSV kayıt sınırlarını doğal olarak tanımlamaz.
response.text'i çağırmak veya tüm satırları bir listede toplamak tüm içeriği yeniden belleğe getirir. Akış, taşıma arabellekleri ve kendisi büyük bir alan içerebilen geçerli kayıt için hâlâ yer gerektirir.
Yanıt bağlamı, döngü çıktığında gövdeyi kapatır; erken bir eşleşme dahil. Okuma zaman aşımı, gelen verileri bekleme süresini sınırlar, büyük bir dosya aktarımının toplam ömrünü değil.